2016-04-05 17 views
2

だから私はそれがこのように動作します、ウェブサイト上のコンテンツをロード用のAjaxシステムを持っている:ボタンをクリックすると、JavaScriptの関数が呼び出されMicrosoft EdgeキャッシングAjaxリクエスト?

onclick="doSomething('abc')" 

マイJavascriptが次のようになります。

//Ajax 
var xmlhttp; 
function loadXMLDoc(url,cfunc) { 
    if (window.XMLHttpRequest) { 
     // code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
    } else { 
     // code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange=cfunc; 
    xmlhttp.open("GET",url,true); 
    xmlhttp.send(); 
} 
function doSomething(var) { 
    loadXMLDoc("http://www.website.com/ajax/doSomething.php?var="+var, function() { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
      document.getElementById("response-container").innerHTML=xmlhttp.responseText; 
     } 
    }); 
} 

だけのは、このようなビットをテキストエコーと呼ばれるPHPファイル:

echo "Response here"; 

一般に、このタイプのシステムを使用して、このJavascript関数が実行されるたびに特定のIDを持つ要素に新しいコンテンツを読み込みます。

これは3年以上の間完璧に動作していますが、何らかの理由でMicrosoft Edgeがこの応答をキャッシュしています。したがって、コンテンツはまったく正しく生成されていません。あなたはこれを一度実行し、x時間だけ同じキャッシュされた応答を返し続けます。

これに関する正しい修正は何ですか?私はヘッダーを使用する言及を見たことがありますが、私はこの状況で修正プログラムを適用する方法がわかりません。

+2

は、クエリ文字列パラメータにタイムスタンプを追加しようとしたことがありますか?私はCSSファイルを強制的にキャッシュしないようにしています。つまり、 '?var =" + var + "&ts =" + Date.now() ' – Quantastical

+0

ajaxリクエストをキャッシュすることは一般的な問題であり、ブラウザはより積極的にキャッシュする傾向があります。 。 –

答えて

7

EdgeとIE 10/11でもキャッシュされたajaxリクエストに問題がありました。私たちのソリューションは、HTTP-headerCache-Control: no-cacheの使用でした。これはタイムスタンプなしでも機能します。

2

はい、XMLHttpRequestには、キャッシュしないでください。ブラウザは他のHTTPリクエストと同様にそれらを扱います。ブラウザがHTTPヘッダーを使用してコンテンツをキャッシュする方法を完全に制御できます。その後、

だけのF12キーを押して、ネットワーク]タブに移動し、前後を見つける:

1

IEまたはMSエッジでキャッシュを無効にするための最良の方法はそれを行うことですこのタイトルのツールボックスの[常にサーバーから更新]ボタンをクリックします。

それはキャッシュなしでリクエストするたびに送信されます。.. enter image description here

+0

この答えは、このコンテキストではあまり役に立ちません。ウェブアプリケーションのすべてのユーザーに対してこの作業を行う方法を尋ねています。通常、ブラウザの設定を変更するように各ユーザーに依頼することは現実的ではありません。 – Keith