2012-03-01 3 views
0

Я создал файл PHP, который скрещивает веб-страницу (используя cURL) для получения некоторых данных и выводит ее на экран в формате JSON.jQuery AJAX Wait

Целевой сайт включает в себя некоторые перенаправления, которые временно выводят данные в файл PHP. После успешного завершения перенаправления JSON представляется как ожидалось. Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь получить доступ к JSON, используя метод $.ajax() jQuery, он иногда возвращает неверные данные, потому что он не ждет завершения перенаправления.

Вопрос в том, можно ли запросить запрос AJAX до некоторого количества секунд перед возвратом данных, тем самым позволяя успешно выполнить переадресацию в скрипте PHP?

Обратите внимание, что для очистки страницы нет никакого решения для очистки, перенаправления необходимы и должны выводиться на экран для завершения очистки.

ответ

1

В настройках всегда есть timeout.

jQuery docs:

таймаут Номер

Установите время ожидания (в миллисекундах) для запроса. Это будет переопределить любой глобальный тайм-аут с $ .ajaxSetup(). Период ожидания начинается с момента вызова $ .ajax; , если выполняется несколько других запросов, и у браузера нет доступных подключений, возможно, для запроса до таймаута перед отправкой. В jQuery 1.4.x и ниже объект XMLHttpRequest будет находиться в недопустимом состоянии, если время ожидания запроса; доступ к любому члену объекта может быть вызван исключением . В Firefox 3.0+ только запросы сценария и JSONP не могут быть отменены таймаутом; сценарий будет работать , даже если он поступит после периода ожидания.

+0

Но 'timeout' определяет только максимальное время, которое jQuery должен потратить на ожидание ответа. Проблема, с которой я сталкиваюсь, заключается в том, что jQuery получает данные слишком рано (т. Е. До завершения перенаправления на PHP). По сути, я хочу «подождать» на определенное количество времени, пока не будут выполнены какие-либо переадресации на PHP. – BenM

+0

Как работают эти перенаправления? Как правило, вызов Ajax прекращается только после завершения вашего запроса; если перенаправления произойдут позже, это не будет частью того же запроса, что и я. Являются ли эти перенаправления HTTP-темпами (статус 302 найден) или ...? –

+0

Запрошенная страница - JSP. Переадресация на странице - это просто '' refresh. Я считаю, что это используется для создания нового идентификатора запроса, а затем возвращает результаты в одном динамическом JSP. По сути, мне нужно дождаться освежения до конца. – BenM

0

Вы должны использовать функцию prom() в jQuery.

0

Вы всегда можете сохранить результат вашего AJAX вызова, а затем ждать, пока переадресация на finsih, то есть:

$.ajax({ 
    success: function(e) 
    { 
     var wait = setTimeout(function(){ doSomethingWithData(e.data); }, 5000); //5 sec 
    } 

}) 

В качестве альтернативы, вы можете настроить интервал, чтобы проверить, если что-то случилось (перенаправлять законченный) каждый х мс. Я предполагаю, что ваши переадресации дают вам знать, что они завершены?

0
http://examples.hmp.is.it/ajaxProgressUpdater/ 

$i=0; 
while (true) 
{ 
if (self::$driver->executeScript("return $.active == 0")) { 
break; 
} 

if($i == 20) { 
break; 
} 

$i++;`enter code here` 
echo $i; 
usleep(10000); 
} 
+0

Этот код работает для меня ... Для WaitForAjaxComplete:) –