Подтвердить что ты не робот

Обратный вызов ошибки JQuery ajax

Мне нужны некоторые предложения здесь или, может быть, некоторые объяснения. У меня есть jquery ajax call,

$.ajax({
 type: "GET",
 url: base_url+'/ajax/fetch/counts/',
 dataType: 'json',
 data: {},
 error: function(xhr, error){
        console.debug(xhr); console.debug(error);
 },
 success: display_counts
});

Он работает нормально. Мой ответ success срабатывает корректно с ответом. Но я заметил, что мой обратный вызов error запускается каждый раз, даже когда мой вызов возвращает статус успешности 200. В предыдущем обратном вызове error я вижу, что объект xhr.status равен 200.

Может кто-нибудь объяснить, что случилось, или что здесь происходит? Обратный вызов error должен срабатывать только тогда, когда у меня есть 404 или, возможно, ответ не-200. Правильны ли мои предположения?

Спасибо.

4b9b3361

Ответ 1

Обратный вызов ошибки вызывается при ошибках http, но также при сбое анализа JSON на ответ. Это то, что, вероятно, происходит, если код ответа 200, но вы все равно бросаете на обратный вызов ошибки.

Ответ 2

Просто попробуйте использовать $. ajaxSetup(), чтобы получить правильную ошибку:

$(function() {
    $.ajaxSetup({
        error: function(jqXHR, exception) {
            if (jqXHR.status === 0) {
                alert('Not connect.\n Verify Network.');
            } else if (jqXHR.status == 404) {
                alert('Requested page not found. [404]');
            } else if (jqXHR.status == 500) {
                alert('Internal Server Error [500].');
            } else if (exception === 'parsererror') {
                alert('Requested JSON parse failed.');
            } else if (exception === 'timeout') {
                alert('Time out error.');
            } else if (exception === 'abort') {
                alert('Ajax request aborted.');
            } else {
                alert('Uncaught Error.\n' + jqXHR.responseText);
            }
        }
    });
});

Ответ 3

Несколько вещей, о которых я могу думать:

  • Убедитесь, что вы отключили кеширование, установив cache: false.
  • Если вы используете Firefox, попробуйте использовать Firebug и вкладку Net, чтобы отслеживать запрос.
  • Не полагайтесь на анализатор JSON браузера. Я бы рекомендовал следующее: https://github.com/douglascrockford/JSON-js/blob/master/json2.js от создателя JSON не менее

Ответ 4

A недавний вопрос имел схожую проблему с запросами json jquery, попробуйте удалить окружение () из вашего ответа json.

Ответ 5

Я не эксперт jQuery, но я знаю, что с prototype.js, обработчик ошибок AJAX срабатывает, если запрос успешный, но обработчик success вызывает ошибку. Это то же самое в jQuery? Вы можете проверить, происходит ли это, помещая все содержимое display_counts в try..catch block.

Ответ 6

Измените dataType с plain/text на html