ホームページ  >  記事  >  ウェブフロントエンド  >  ajax および 302 応答コードのテスト_JavaScript

ajax および 302 応答コードのテスト_JavaScript

WBOY
WBOYオリジナル
2016-05-16 17:19:091155ブラウズ

ajax リクエストで、サーバー側の応答が 302 Found の場合、このステータス コードは ajax コールバック関数で取得できますか?リダイレクトのために応答ヘッダーから Location 値を取得できますか?実際の状況を見てみましょう。
jquery の $.ajax() を使用して ajax リクエストを開始する JavaScript コードは次のとおりです:

コードをコピー コードは次のとおりです:

$.ajax({
url: '/oauth/respond',
type: 'post',
data: data,
complete : function(jqXHR){
console.log(jqXHR.status);
},
エラー: function (xhr) {
console.log(xhr.status);
}
});

サーバーが 302 Found 応答を返すと、ブラウザーでの実行結果は次のようになります:
ajax および 302 応答コードのテスト_JavaScript
 

ajax の complete() および error() コールバック関数で取得されるステータス コードは、どちらも 302 ではなく 404 です。

これはなぜですか?

stackoverflow で見つかりました

コードをコピーします コードは次のとおりです:

ブラウザが自動的にリダイレクトを処理するため、XHR コールバックを使用してリダイレクトを処理することはできません。リダイレクトされた場所にあるもののみが返されます。

サーバーが送信したときであることがわかります。ブラウザへの 302 応答 ブラウザを使用する場合、ブラウザは ajax コールバック処理を直接実行しませんが、最初に 302 リダイレクトを実行します。つまり、応答ヘッダーから場所情報を読み取り、その後、場所内の URL にリクエストを送信します。このリクエストに対するレスポンスを受信すると、ajaxコールバック処理を実行します。一般的なプロセスは次のとおりです:
ブラウザ -> 302 -> ブラウザ -> ajax コールバックProgram では、302 によって返されるリダイレクト URL にはサーバー上に対応するハンドラーがないため、ajax コールバック関数で取得される 404 ステータス コードは 200 になります。対応する URL が存在する場合、取得されるステータス コードは 200 です。
そのため、Ajax リクエストの 302 レスポンスに基づいて location.href 経由でリダイレクトしたい場合、それは実現できません。

どうやって解決しますか?
方法 1

引き続き ajax を使用し、サーバー側のコードを変更し、元の 302 応答を json 応答に変更します (次の ASP.NET MVC サンプル コードなど)。 >

return Json(new { status = 302, location = "/oauth/respond" }) ;


Ajax コードは少し変更できます:


コードをコピーします コードは次のとおりです。
$.ajax({
url: '/oauth/respond',
type: 'post',
data: data 、
dataType: 'json'、
成功: function (data) 🎜>


方法 2

ajax の代わりにフォームを使用します。


コードをコピー


コードは次のとおりです:

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。