13

特定のサーバーにリクエストを送信すると、303 レスポンスが返され、続いてリクエストされたレスポンスと 200 ステータス コードの組み合わせが返されます。面白いことに、これは開発者コンソールのネットワーク ビューにしか表示されません。$.ajax() リクエストのステータスコードとレスポンスを確認すると、2 番目のリクエストのレスポンスと 200 http ステータス コードが表示されます。

問題は、2 番目の要求が (ステータス コード 200 ですが) キャッシュされているように見えることです。キャッシュできないようにする必要があります。したがって、http 303 ステータス コードで発生する転送プロセスに介入したいと考えています。jquery 関数でステータス コードをチェックしてから、サーバーに応答をキャッシュしないように指示する明示的なヘッダーを含む get 要求を送信したいと思います。

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

手伝って頂けますか?

編集

10.3.4 303 その他を参照

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

たぶん、ユーザーエージェントが自分自身をリダイレクトするのを何らかの形で防ぐ必要があるので、リダイレクトを行うことができますか?

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

4

4 に答える 4

9

300 の範囲の応答は、透過的であることを意味します。私の知る限り、Webブラウザはそれらのいずれもjavascriptに公開していません。したがって、303 の処理はオプションではありません。

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

于 2013-05-21T00:26:03.707 に答える
2

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

$.ajax({
  url: "example.html",
  cache: false
  }
}).done(function( html ) {
  $("#results").append(html);
});
于 2013-06-01T18:05:58.077 に答える
1

これは古い投稿ですが、誰かがこれを役に立つと思うかもしれません。

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

于 2015-11-20T19:37:58.397 に答える
-1

通話statusCodeのプロパティを表示.ajax()

例 :

$.ajax({
  statusCode: {
    303: function() {
      alert("page not found");
    }
  }
});
于 2013-05-02T12:13:12.043 に答える