Ответ 1
Обратный вызов ошибки вызывается при ошибках http, но также при сбое анализа JSON на ответ. Это то, что, вероятно, происходит, если код ответа 200, но вы все равно бросаете на обратный вызов ошибки.
Мне нужны некоторые предложения здесь или, может быть, некоторые объяснения. У меня есть 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. Правильны ли мои предположения?
Спасибо.
Обратный вызов ошибки вызывается при ошибках http, но также при сбое анализа JSON на ответ. Это то, что, вероятно, происходит, если код ответа 200, но вы все равно бросаете на обратный вызов ошибки.
Просто попробуйте использовать $. 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);
}
}
});
});
Несколько вещей, о которых я могу думать:
cache: false
.A недавний вопрос имел схожую проблему с запросами json
jquery, попробуйте удалить окружение ()
из вашего ответа json.
Я не эксперт jQuery, но я знаю, что с prototype.js, обработчик ошибок AJAX срабатывает, если запрос успешный, но обработчик success
вызывает ошибку. Это то же самое в jQuery? Вы можете проверить, происходит ли это, помещая все содержимое display_counts
в try..catch block.
Измените dataType
с plain/text
на html