Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Сообщение "ждите", пока выполняется скрипт на сервере (https://javascript.ru/forum/events/33888-soobshhenie-zhdite-poka-vypolnyaetsya-skript-na-servere.html)

Эдуард77 12.12.2012 21:35

Сообщение "ждите", пока выполняется скрипт на сервере
 
Здравствуйте!
На странице есть кнопка, при клике на которой происходит вызов скрипта на сервере, "createPdf.php", скрипт несколько секунд крутится, формирует и отдает pdf файл, браузер в это время ждет ответа. Хотелось бы развлечь пользователя, во время ожидания, табличкой типа "Ждите, формируется файл", как только скрипт заканчивает работу и появляется стандартное окошко сохранения файла, табличка убирается.
Подскажите, как такое реализовать?
Какое событие нужно обработать, чтобы понять, что скрипт закончил работу и браузер получил ответ?

Dremlin 12.12.2012 22:02

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

Dremlin 12.12.2012 22:19

function showLoader() 
{
 $('#loadingDiv').show();
};

function hideLoader() 
{
 $('#loadingDiv').hide();
};
function doRequest() 
{
 showLoader();
  $.ajax({
  type: "POST",
  url: "youscript.xxx",
  success: function (result) 
  {
   if (result == 'True') {
   alert("Request is done!");
  } 
   else 
  {
   alert("Request is fail!");
   };
},

complete: function () 
{
  hideLoader();
}
});
};


Логика примерно такая, вот. :)

Эдуард77 12.12.2012 22:43

Смысл понятен, да, спасибо.
Но мой скрипт на сервере возвращает PDF файл. Разве может XHR принять PDF?

Dremlin 13.12.2012 11:56

Вы можете по окончанию генерации pdf файла скриптом (я не знаю на каком языке вы пишете) создать и отослать пользователю ссылку по которой он и скачает файл. Это как вариант.

Dremlin 13.12.2012 12:24

Или даже можно после формировании ссылки сделать автоматический клик(переход по ней). Ну и пойдёт загрузка pdf файла, как то так.

Эдуард77 13.12.2012 16:32

Dremlin, спасибо за советы.
Нашел решение здесь

Dremlin 13.12.2012 17:42

Всегда, пожалуйста! :)


Часовой пояс GMT +3, время: 03:55.