JQuery AJAX ошибка обратного вызова - PullRequest
34 голосов
/ 04 сентября 2010

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

$.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. Верны ли мои предположения?

Спасибо.

Ответы [ 6 ]

30 голосов
/ 28 января 2013

Просто предложение, попробуйте использовать $. 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);
            }
        }
    });
});
28 голосов
/ 27 марта 2013

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

2 голосов
/ 04 сентября 2010

Несколько вещей, которые я могу вспомнить:

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

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

1 голос
/ 04 сентября 2010

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

0 голосов
/ 20 августа 2016

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...