ホームページ  >  記事  >  ウェブフロントエンド  >  IE での Ajax キャッシュ問題の迅速な解決策 (メソッドの取得)_JavaScript スキル

IE での Ajax キャッシュ問題の迅速な解決策 (メソッドの取得)_JavaScript スキル

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

長い間苦労した後、プログラムはjqueryのloadメソッドを使用してリクエストを送信します。なぜ2回目のリクエストが送信できないのか不思議です。 Baidu で少し調べましたが、get メソッドを使用してロードが要求されるとは知りませんでした。そのため、IE ブラウザは

に応答しません

キャッシュされています。オンラインで多くの解決策を検索しましたが、より包括的な解決策だと思うのは次のとおりです。主にクライアント側ソリューションとサーバー側ソリューションに分かれます。

1. クライアント ソリューション
IE アクセス ポリシー: インターネット オプション -- 閲覧履歴 -- 設定 -- アクセスごとにインターネット一時ファイルのオプションを変更することもできます。ウェブページで使用できます

1: AJAX リクエストされたページの後にランダム関数を追加します。ランダム時間関数

を使用できます。

JavaScript によって送信された URL の後に t=Math.random() を追加します。
例: URL "&" "t=" Math.random() または new Date();

2: XMLHttpRequest がリクエストを送信する前に XMLHttpRequest.setRequestHeader("If-Modified-Since", "0") を追加します

通常、ここでの XMLHttpRequest は直接使用されません。

次のようなコードが見つかるはずです。
XXXXX.send(YYYYYY);
それを
XXXXX.setRequestHeader ( "If-Modified-Since","0");
XXXXX.send(YYYYYY);

どちらの方法も非常に効果的であることが実践で証明されています。
1. サーバーにヘッダー ("Cache-Control: no-cache, must-revalidate") を追加します。
2. xmlHttpRequest.setRequestHeader("If -Modified-Since") を追加します。 "0");
3. Ajax でリクエストを送信する前に xmlHttpRequest.setRequestHeader("Cache-Control","no-cache"); を追加します。 Math.random(); // もちろん、ここでの fresh パラメータは任意に選択できます
5. 4 番目のメソッドは 3 番目のメソッドと似ており、URL パラメータの後に「?timestamp=」を追加します new Date().getTime( ); //このメソッドは推奨されます
6. GET の代わりに POST を使用します: 推奨されません


2. サーバー側のソリューション:
Struts2 を例に挙げます: Struts2 のサーバー側での使用法

Xml コード


コードをコピー コードは次のとおりです:<パッケージ名="json -nocache" extends="json-default">
<インターセプター>
<インターセプター名="cachingHeadersInterceptor" class="com.ssa.pct.web.interceptor.CachingHeaderInterceptor" /> ;
<インターセプタースタック名="defaultSecurityStack">
<インターセプター参照名="defaultStack" />
<インターセプター参照名="cachingHeadersInterceptor" />







Java コード


コードをコピー コードは次のとおりです。public class CachingHeaderInterceptor extends AbstractInterceptor {
プライベート静的最終ロングserialVersionUID = 1L;
public String intercept(ActionInvocation invocation) throws Exception {

ActionContext context = invocation.getInvocationContext();

HttpServletResponse response = (HttpServletResponse) context.get(StrutsStatics.HTTP_RESPONSE);

if (response ! = null) {
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
response.setHeader("期限切れ", "-1");
}
return invocation.invoke();
}

}

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