прерывание вызова jquery ajax

#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, вам нужно знать, что это не завершено, потому что это может вызвать исключение.