Как отобразить прогресс серверного скрипта в jQuery? - PullRequest
6 голосов
/ 16 сентября 2008

С помощью этого кода я могу показать анимированный GIF во время работы серверного скрипта:

function calculateTotals() {
    $('#results').load('getResults.php', null, showStatusFinished);
    showLoadStatus();
}

function showLoadStatus() {
    $('#status').html('');
}


function showStatusFinished() {
    $('#status').html('Finished.');
}

Тем не менее, я хотел бы отобразить состояние того, как далеко находится сценарий, например, «Обрабатывать строку 342 из 20000 ...» и считать до завершения.

Как я могу это сделать? Я могу сделать сервер-скрипт, который постоянно содержит обновленную информацию, но куда мне поместить команду, чтобы читать это, скажем, каждую секунду?

Ответы [ 4 ]

2 голосов
/ 03 октября 2008

Прочитав ваши комментарии к ответу Андрея.

Вы бы прочитали такой статус:

function getStatus() {
    $.getJSON("/status.php",{"session":0, "requestID":12345}, 
    function(data) { //data is the returned JSON object from the server {name:"value"}
          setStatus(data.status);
          window.setTimeout("getStatus()",intervalInMS)
    });
}

Используя этот метод, вы можете открыть несколько одновременных XHR-запросов на сервере.

все ваши status.php для вывода:

{"status":"We are done row 1040/45983459"}

Однако вы можете вывести в ответ столько информации, сколько хотите, и соответственно обработать ее (например, с помощью индикатора выполнения или выполнения анимации ..)

Для получения дополнительной информации о $ .getJSON см. http://docs.jquery.com/Ajax/jQuery.getJSON

1 голос
/ 16 сентября 2008

Я не согласен со спецификой для jQuery, но общий ответ, который не включает в себя опрос wold: используйте вариант forever frame . По сути, создайте скрытый iframe и установите для него src 'getresults.php'. Внутри getresults вы «потоком» возвращаете блоки сценариев, которые являются вызовами функции javascrpt в родительском документе, которая фактически обновляет прогресс. Вот пример , который показывает основную идею за рамкой навсегда. (Я бы не рекомендовал использовать его настоящий JS или HTML, хотя он достаточно средний)

0 голосов
/ 16 сентября 2008

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

То, как вы получаете этот сценарий состояния, состоит в том, чтобы знать, что состояние задания во многом зависит от того, как настроен сервер, но, вероятно, включает в себя запись сообщения в таблицу базы данных в различные моменты во время задания. Сценарий состояния затем читает это сообщение из базы данных.

0 голосов
/ 16 сентября 2008

Ваш серверный скрипт должен каким-то образом сохранять прогресс на сервере (файл, поле в базе данных, memcached и т. Д.).

У вас должна быть функция AJAX, возвращающая текущий прогресс. Опрашивайте эту функцию раз в секунду и отображайте результат соответствующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...