2013-05-02 12 views
9

リクエストを特定のサーバーに送信すると、303の応答が返され、200のステータスコードと組み合わせて要求された応答が返されます。 面白いことに、開発者コンソールのネットワークビューでしか見ることができません。 my $ .ajax()リクエストのステータスコードとレスポンスをチェックすると、2番目のリクエストのレスポンスと200個のhttpステータスコードがあります。jquery(リダイレクトの防止)の303ステータスコードに反応します。

問題は、2番目のリクエストがキャッシュされているようです(ステータスコードは200ですが)、キャッシュできないようにする必要があります。 したがって、私は実際にHTTP 303ステータスコードで発生する転送プロセスに介入したいと思います。私のjquery関数は、ステータスコードを確認し、明示的なヘッダーでget要求を送信し、サーバーにレスポンスをキャッシュしないように指示します。

jQuery.ajaxメソッドは転送されたリクエストのレスポンスとステータスコード(200)で応答するため、これを行う方法はわかりません。

私を助けることができますか?

編集

10.3.4 303参照他

要求に対する応答が、異なるURIの下に見つけることができると がそのリソースにGETメソッドを使用して取得されるべきです。このメソッド は主に、POST起動スクリプトの出力を に選択して、ユーザーエージェントを選択したリソースにリダイレクトできるようにするために存在します。新しいURIは、最初に要求されたリソースの代替参照ではない です。 303 応答をキャッシュしてはいけませんが、2番目の (リダイレクトされた)要求に対する応答はキャッシュ可能である必要があります。

多分私はリダイレクトすることができるので、ユーザーエージェントが自分自身をリダイレクトできないようにする必要がありますか?

または、クライアント側からの2番目の要求をキャッシュしないようにサーバー/ブラウザに通知する方法はありますか?それとも私の要求をリダイレクトしないようにするのですか?リダイレクトする前に少なくとも2番目の要求を変更する必要がありますか?

+0

httpリクエスト – keinabel

答えて

8

応答が透明であることを意味しています。 AFAIK、WebブラウザはJavaScriptのどれにも公開しません。従って、303の取り扱いは選択肢ではない。

ajaxSetupでcacheプロパティをfalseに設定しようとしましたか?リクエストにタイムスタンプを追加し、ブラウザがレスポンスをキャッシュしないようにします。また、手動で自分で行うこともできます。ブラウザは最初のリクエストURLと2番目のレスポンスを一致させる必要があります

+0

http://www.w3.org/TR/XMLHttpRequest/#same-origin-request-event-rulesを参照してください。 – yoelp

+0

これは、なぜIEが応答ボディをJSに対して303に返さないのかを理解するのに役立ちました(Chromeはそうですが)。ありがとう! –

-1

あなた.ajax()コール

例のstatusCodeプロパティを参照してください:300の範囲内

$.ajax({ 
    statusCode: { 
    303: function() { 
     alert("page not found"); 
    } 
    } 
}); 
+4

を除いてサーバーにアクセスできません: "_ $ .ajax()リクエストのステータスコードと応答をチェックすると、2番目のリクエストの応答と200 httpステータスコード._ "..このアプローチにも同じことが言えます。私は$アヤックスでそれを試してみました({{ 303: からstatusCode関数(){ 警告(303); }、200:関数(){ 警告(200); } } })。それは常に200メソッドにジャンプします。 – keinabel

+0

303レスポンスのデータを取得する方法はありますか? – user3206010

2

お客様cannot stop the browser from following the 303 redirect。とにかく、それはあなたが望むものではないように思えます。元の要求がキャッシュされるのを防ぐためにブラウザで行うことは、リダイレクトされた200がキャッシュされないようにするためにも同様に機能するはずです。つまり、リクエストごとに一意のURLを使用する以外に、ブラウザ側でできることはほとんどありません。 cache: falseを設定すると、これはjQueryによって自動的に行われます。

$.ajax({ 
    url: "example.html", 
    cache: false 
    } 
}).done(function(html) { 
    $("#results").append(html); 
}); 
0

これは古い投稿ですが、誰かがこれを便利に使うかもしれません。

私は同じ問題があり、私の場合、問題はajaxを使用して呼び出されたメソッドにありました。問題は、この方法で設定されたリダイレクトにありました。だから、これに基づいて、あなたは両方のajaxとリダイレクト(サーバー側)を使用することはできません、私はメソッドからredirect()関数を削除した、私はすべて期待どおりに動作します。 Btw、私はcodeigniterを使用しています。

関連する問題