Как получить код статуса ответа от jQuery.ajax?
В следующем коде все, что я пытаюсь сделать, это получить код ответа HTTP из вызова jQuery.ajax. Затем, если код 301 (перемещается навсегда), отобразите заголовок ответа "Местоположение":
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>jQuery 301 Trial</title>
<script src="http://code.jquery.com/jquery-1.5.1.min.js"></script>
<script type="text/javascript">
function get_resp_status(url) {
$.ajax({
url: url,
complete: function (jqxhr, txt_status) {
console.log ("Complete: [ " + txt_status + " ] " + jqxhr);
// if (response code is 301) {
console.log ("Location: " + jqxhr.getResponseHeader("Location"));
// }
}
});
}
</script>
<script type="text/javascript">
$(document).ready(function(){
$('a').mouseenter(
function () {
get_resp_status(this.href);
},
function () {
}
);
});
</script>
</head>
<body>
<a href="#" onclick="location.href='http://ow.ly/4etPl'; return false;">Test 301 redirect</a>
<a href="#" onclick="location.href='http://cnn.com/not_found'; return false;">Test 404 not found</a>
</body>
</html>
Может кто-нибудь указать, где я ошибаюсь? Когда я проверяю объект "jqxhr" в Firebug, я не могу найти код состояния или заголовок ответа "Местоположение". Я установил точку останова на последней строке "complete".
Большое спасибо.
Ответы
Ответ 1
Я вижу поле статуса на объекте jqXhr, вот скрипка с ним:
http://jsfiddle.net/magicaj/55HQq/3/
$.ajax({
//...
success: function(data, textStatus, xhr) {
console.log(xhr.status);
},
complete: function(xhr, textStatus) {
console.log(xhr.status);
}
});
Ответ 2
Когда ваш запрос XHR возвращает ответ Redirect (HTTP-статус 301, 302, 303, 307), XMLHttpRequest
автоматически следует перенаправленному URL-адресу и возвращает код статуса этого URL.
Вы можете получить коды статуса без перенаправления (200, 400, 500 и т.д.) с помощью свойства status
объекта xhr.
Таким образом, вы не можете получить перенаправленное местоположение из заголовка ответа запросов 301
, 302
, 303
или 307
.
Возможно, вам придется изменить логику сервера, чтобы ответить так, чтобы вы могли справиться с перенаправлением, вместо того чтобы позволить браузеру это делать. пример реализации.
Ответ 3
Пришел к этому старому потоку, ища аналогичное решение самостоятельно и нашла принятый ответ на использование метода .complete()
jquery ajax
. Я цитирую уведомление на веб-сайте jquery:
Обратные вызовы jqXHR.success(), jqXHR.error() и jqXHR.complete() устарели по состоянию на jQuery 1.8. Чтобы подготовить код для их возможного удаления, используйте jqXHR.done(), jqXHR.fail() и jqXHR.always().
Чтобы узнать status code
ответа ajax, можно использовать следующий код:
$.ajax( url [, settings ] )
.always(function (jqXHR) {
console.log(jqXHR.status);
});
Аналогично работает для .done()
и .fail()
Ответ 4
Вероятно, более идиоматический jQuery должен использовать свойство statusCode объекта параметра, переданного функции $.ajax:
$.ajax({
statusCode: {
500: function(xhr) {
if(window.console) console.log(xhr.responseText);
}
}
});
Однако, поскольку Livingston Samuel сказал, что невозможно заблокировать 301 код состояния в javascript.
Ответ 5
Вы можете проверить свой обработанный контент, просто console.log его, и вы увидите, что свойство whitch имеет код состояния. Если вы не понимаете jsons, обратитесь к видео: https://www.youtube.com/watch?v=Bv_5Zv5c-Ts
В нем объясняются очень простые знания, которые позволяют вам чувствовать себя более комфортно с javascript.
Вы можете сделать это с более короткой версией запроса ajax, см. код выше:
$.get("example.url.com", function(data) {
console.log(data);
}).done(function() {
// TO DO ON DONE
}).fail(function(data, textStatus, xhr) {
//This shows status code eg. 403
console.log("error", data.status);
//This shows status message eg. Forbidden
console.log("STATUS: "+xhr);
}).always(function() {
//TO-DO after fail/done request.
console.log("ended");
});
Пример вывода консоли:
error 403
STATUS: Forbidden
ended
Ответ 6
jqxhr - объект json:
полная отдача:
jqXHR (в jQuery 1.4.x, XMLHTTPRequest) и строка категоризация статуса запроса (" успех "," немодифицированный "," ошибка "," таймаут "," прервать "или" parsererror").
см:
jQuery ajax
чтобы вы сделали:
jqxhr.status
, чтобы получить статус