次のコードで、私がやろうとしているのは、jQuery.ajax呼び出しからHTTP応答コードを取得することだけです。次に、コードが301(恒久的に移動)の場合は、 'Location'という応答ヘッダーを表示します。
<?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="http://ow.ly/4etPl">Test 301 redirect</a>
<a href="http://cnn.com/not_found">Test 404 not found</a>
</body>
</html>
誰かが私が間違っているところを指摘できますか? Firebugで 'jqxhr'オブジェクトをチェックすると、ステータスコードも 'Location'レスポンスヘッダーも見つかりません。 'complete'の最後の行にブレークポイントを設定しました。
どうもありがとう。
私はjqXhrオブジェクトのstatusフィールドを見ます、ここでそれが働いているいじるがあります:
http://jsfiddle.net/magicaj/55HQq/3/
$.ajax({
//...
success: function(data, textStatus, xhr) {
console.log(xhr.status);
},
complete: function(xhr, textStatus) {
console.log(xhr.status);
}
});
私自身が同じような解決策を探しているこの古いスレッドに出くわし、そして受け入れられた答えがjquery ajax
の.complete()
メソッドを使用していることを見つけました。私はここで jqueryのウェブサイト にその通知を引用します。
jqXHR.success()、jqXHR.error()、およびjqXHR.complete()のコールバックは、jQuery 1.8以降では推奨されなくなりました。 。最終的な削除のためにコードを準備するには、代わりにjqXHR.done()、jqXHR.fail()、およびjqXHR.always()を使用してください。
Ajaxレスポンスのstatus code
を知るために、以下のコードを使うことができます。
$.ajax( url [, settings ] )
.always(function (jqXHR) {
console.log(jqXHR.status);
});
.done()
と.fail()
についても同様に動作します。
XHRリクエストがリダイレクトレスポンス(HTTPステータス301、302、303、307)を返すと、XMLHttpRequest
が自動的にリダイレクトされたURLの後に続き、そのURLのステータスコード を返します。
Xhrオブジェクトのstatus
プロパティを介して、リダイレクトされないステータスコード(200、400、500など)を取得できます。
そのため、301
、302
、303
または307
リクエストのレスポンスヘッダーからリダイレクトされた場所を取得することはできません。
ブラウザに実行させるのではなく、リダイレクトを処理できる方法で応答するようにサーバーロジックを変更する必要があるかもしれません。 実装例 。
$ .ajax関数に渡されるパラメータオブジェクトのstatusCodeプロパティを使用するほうが、おそらくもっと慣用的なjQueryです。
$.ajax({
statusCode: {
500: function(xhr) {
if(window.console) console.log(xhr.responseText);
}
}
});
しかし、 Livingston Samuel が言ったように、JavaScriptで301のステータスコードをキャッチすることは不可能です。
あなたはあなたのリスポンコンテンツをチェックすることができます、それをconsole.logしてください。そうすればあなたはwhitchプロパティにステータスコードがあるのを見るでしょう。あなたがJSONを理解していない場合は、ビデオを参照してください。 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
jqxhrはJSONオブジェクトです。
完全なリターン:
jqXHR(jQuery 1.4.x、XMLHTTPRequest内)オブジェクト、および要求のステータスを分類する文字列( "success"、 "notmodified"、 "error"、 "timeout"、 "abort"、または "parsererror" ")。
参照: jQuery ajax
そうするでしょう:
ステータスを取得するjqxhr.status