ajax: не ждите ответа, но периодически проверяйте его - PullRequest
2 голосов
/ 22 марта 2010

У меня есть процесс PHP, который требует много времени для запуска.Я не хочу, чтобы процесс AJAX, который вызывает его, ожидал его завершения.Когда процесс PHP завершится, он установит поле в базе данных.Должен быть какой-то вызов AJAX-опроса, который периодически проверяет поле базы данных и устанавливает сообщение.

Как настроить вызов JQuery AJAX для опроса, а не ожидания?Должен ли скрипт PHP делать что-то особенное?

Ответы [ 4 ]

2 голосов
/ 22 марта 2010

Шаг 1: Первый вызов длительного процесса - Установите ignore_user_abort (true);в сценарии PHP, который занимает много времени и закрывает соединение.

Шаг 2: Проверьте, обновляется ли поле БД, используя предложенные методы.

2 голосов
/ 22 марта 2010

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

 var timer;
 var count = 0;
 function poll(url) {
      timer = setTimeout(function() {
          $.ajax({
              url: url,
              success: function(data) {
                  if (data.Status) {
                      ...do something...
                  }
                  else {
                     if (++count > 10) {
                       ...failure action...
                     }
                     else {
                         poll(url);
                     }
                  }
              ...other options...
           })
      },5000)
 }

Затем на стороне сервера используйте что-то, что делает (псевдокод) ...

 if operation is not complete
     return serialize( { Status : false } )
 else
     data = ....
     data.Status = true
     return serialize(data)
 end
0 голосов
/ 22 марта 2010

Вы имеете в виду обычный опрос (в отличие от длинного опроса)?Если да, возможно, это поможет: http://jquery -howto.blogspot.com / 2009/04 / ajax-update-content-every-x-seconds.html

PHP-скриптпросто проверьте поле базы данных и немедленно верните true / false.

0 голосов
/ 22 марта 2010

Одним из быстрых решений было бы создание другого PHP-скрипта, который вы можете вызвать, который проверит это, поскольку прямой доступ к БД через метод comm'а AJAX не является хорошей практикой.

  1. Создайте файл PHP с обязательной проверкой БД.
  2. Сделайте так, чтобы он выложил 'T' или 'F' или что-то в этом роде
  3. Создайте SetInterval('yourfunctionname',100), чтобы вы могли вызывать скрипт опроса.
  4. Если ответ на этот опрос 'T', вызовите другой долгосрочный сценарий.
...