Ответ 1
Запросы на кросс-сайт, JSONP, не будут вызывать вызовы ошибок. У меня была такая же проблема: http://forum.jquery.com/topic/jquery-ajax-with-datatype-jsonp-will-not-use-error-callback-if-request-fails
Я пытаюсь получить доступ к событию 404, которое я могу видеть, возвращаясь как 404 с firebug, но функция ошибки не пинает, С моим кодом ниже всегда получается Error: success?.
т.
$.ajax({
type: 'get',
url: 'url: 'https://admin.instantservice.com/resources/smartbutton/5702/10945/available.gif?' + Math.floor(Math.random()*10001),
success: function(data, textStatus, XMLHttpRequest){
console.log('Error: ' + textStatus);
},
error:function (xhr, ajaxOptions, thrownError){
alert(xhr.status);
alert(xhr.statusText);
alert(xhr.responseText);
}
});
Снова я знаю 1000%, что im получает 404 Not Found в firebug, он никогда не вызывает ошибку.
Я что-то пропустил?
Запросы на кросс-сайт, JSONP, не будут вызывать вызовы ошибок. У меня была такая же проблема: http://forum.jquery.com/topic/jquery-ajax-with-datatype-jsonp-will-not-use-error-callback-if-request-fails
То, что вы также можете сделать, это использовать функцию $.ajaxError, например
$("#message").ajaxError(function(event, request, settings){
$(this).show();
$(this).append("<li>Error requesting page " + settings.url + "</li>");
});
У меня был очень похожий результат/проблема. Суть в том, что я не смог убедиться, что мой URL-адрес не содержит никаких одинаковых имен параметров в разделе данных функции ajax.
Причиной для меня было то, что я создал URL-адрес с php-кодом, чтобы получить URL-адрес
pines_url('com_referral', 'sendhttprequest')
который выводится на URL с параметром
option=com_referral
и параметр
action=sendhttprequest
Моя проблема BIG заключалась в том, что я также пытался отправить параметр "действие" в раздел данных функции AJAX.
data: {"action": "getpoints"}
Итак, второе действие было отменено, "getpoints" не существует, но сложная часть заключается в том, что firebug, очевидно, не сказал бы мне url с getpoints, он сказал бы мне url как sendhttprequest.
Надеюсь, что это не сбивало с толку, но я также надеюсь, что это поможет кому-то еще с подобной проблемой!
Добавление значения тайм-аута вызовет обратный вызов ошибки, если в течение указанного времени ответа нет. При обратном вызове 5000, если запрос jsonp не отвечает через 5 секунд (т.е. Он 404 с), тогда будет выполняться обратный вызов ошибки.
$.ajax({
type: 'get',
timeout: 5000,
url: 'url: 'https://admin.instantservice.com/resources/smartbutton/5702/10945/available.gif?' + Math.floor(Math.random()*10001),
success: function(data, textStatus, XMLHttpRequest){
console.log('Error: ' + textStatus);
},
error:function (xhr, ajaxOptions, thrownError){
alert(xhr.status);
alert(xhr.statusText);
alert(xhr.responseText);
}
});
Я не знаю точно, почему, но если вы используете метод chaining .fail
, ошибка будет правильно захвачена, даже если это другой сайт:
$.ajax({
type: 'get',
url: 'http://example.com',
success: function(data, textStatus, XMLHttpRequest){
console.log('Error: ' + textStatus);
}
}).fail(function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(xhr.statusText);
alert(xhr.responseText);
});