Вопрос

В моем веб -приложении пользователь может генерировать файл CVS, который иногда может получить довольно большую 10+ МБ. Отчет, очевидно, может занять некоторое время, чтобы генерировать. Я хочу отобразить пульсатор для пользователя, пока генерируется отчет, как только им предложено сохранить/запустить, я хочу, чтобы пульсинщик скрылся. Это возможно?

Это было полезно?

Решение

Нет, на самом деле невозможно обнаружить, когда файл прибывает, и пользователь сохраняет его. Вы в значительной степени застряли, просто обновляете свой пульсатор и предлагаете конфиденциальную ссылку, когда они будут готовы к продолжению.

Если бы это было возможно, то сайты загрузки использовали бы его, чтобы автоматически перейти к списку загрузки, когда вы закончите на целевой странице файла.

Другие советы

Да, как правило, тяжелые операции в JavaScript разделены на куски, а затем вызываются из SetInterval. Тайм -аут удерживает страницу от замораживания.

var csvTxt = "";
var isDone = false;
addPart = function(){
    csvTxt += addTextFromLongCalculation();
    if(csvTxt > 10000000) isDone = true; // this is an arbitrary example
}

var handle = setInterval(function(){
   addPart();
   if(isDone){
        clearInterval(handle);
   }
}, 20);

Я предполагаю, что вы публикуете некоторые данные, генерируя CSV на сервере, устанавливая тип контента и ожидая появления диалога сохранения браузера. Правильный?

В этом случае, я думаю, вы будете разочарованы. Я провожу довольно много времени, пытаясь найти события, которые стреляют в этот точный сценарий, и я не мог понять это. Наконец -то мне пришлось сделать что -то запутанное, как использовать XHR, чтобы опросить статус создания файла. Как только я получил ответ, который хотел, я спрятал пульсатор и попросил CSV.

Быть более ясным:

  • Покажите пульсатор
  • Используйте XHR, чтобы сообщить серверу для начала генерации CSV
  • Используйте XHR, чтобы опросить статус создания CSV
  • После завершения создания файла:
    • Добавьте невидимый iframe в документ, который указывает на недавно созданный CSV, и пусть сервер добавил к нему заголовок контента.
    • Спрячьте пульсировку после короткой задержки (вы можете попытаться сделать время, чтобы пульс был скрыт после того, как окно сохранить файл будет отображаться, но в то время как пользователь взаимодействует с окном). Вы также можете обнаружить событие размытия в окне для скрытия пульсатора, но я уверен, что это не будет очень надежным.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top