#jquery #ajax #timeout
#jquery #ajax #тайм-аут
Вопрос:
Мне нужно выполнить несколько ajax-вызовов php-скрипта, который обработает данные и отобразит результаты.
Но, похоже, время ожидания вызовов истекает. в Chrome и Firefox, когда я проверяю вызовы, они отображаются красным цветом.
мой ajax-код:
$.ajax({
type: "POST",
url: "/toimport",
data: ({"filename": $("#file").val(), "search_engine": $("#engine").val(), "matchtype": $("#matchtype").val(), "year" : $("#year").val(), "country" : country, "sheet" : i, "filetype": file_type}),
success: function(data, textStatus, jqXHR){
$("#message").append(data);
},
error: function(XMLHttpRequest, textStatus, errorThrown){
$("#message").append(textStatus '<br />');
}
});
когда я делаю PHP-код тривиальным (возвращаю одно из полученных значений), все вызовы успешны, только когда PHP требует некоторого времени, вызов ajax завершается неудачей.
Я пытался использовать тайм-аут при вызове ajax, но, похоже, это не работает. Возвращаемый textStatus равен ‘error’, значение errorThrown пустое.
Спасибо
Комментарии:
1. проверьте заголовок ответа, чтобы увидеть, что сервер возвращает (например, firebug) в виде кода ошибки. возможно, имеется внутренняя ошибка сервера 500, вызванная вашим полным php-скриптом. В большинстве случаев сервер действительно отвечает с ошибкой.
2. Я не получаю заголовков ответа для тех вызовов, которые завершаются неудачей.
Ответ №1:
Вы можете обработать свой вызов AJAX следующим образом:
var ajaxCall = $.ajax(options);
Вы можете прервать свой вызов, если у вас есть ссылка на ваш вызов AJAX:
ajaxCall.abort();
Вам необходимо выполнить дополнительные проверки, чтобы узнать, был ли ваш вызов AJAX выполнен или все еще работает, чтобы избежать какой-либо ошибки в вашем abort
запросе.
Комментарии:
1. как мне выполнить проверки?
2. каждый вызов ajax имеет такие свойства, как ‘readyState’, это может быть ‘1’, ‘4’ и так далее. Поэтому, когда вы прерываете вызов ajax, вам нужно знать, что это не завершено, потому что это может вызвать исключение.