電気ウナギ的○○

About Home

XMLHttpRequest でキャッシュを無効にするリクエスト

shinoda (2022年3月26日 21:23)
JavaScript の中で、Shift_JIS で書かれたテキストファイルを読んであれこれしてるんだけど、ファイルを読み込んでくる function はこんな感じ。
XMLHttpRequest を使っている。

//@cc_on
function getTextFile (fname) {

    var text = "";
    var ajax = new XMLHttpRequest();

    with (ajax) {
    /*@if(1) onreadystatechange @else@*/ onload /*@end@*/ =
    function () { readyState == 4 && status == 200 && (text = responseText); };
        open('GET', fname, false);
        overrideMimeType('text/html;charset=Shift_JIS');
        send(null);
    };

    return text;

}

fname には、http://www.exsample.jp/data/hoge.txt のような URI を渡してやる。
ただ、この hoge.txt を更新したあとも、ひたすら古いキャッシュの内容を読み込んでくるので、更新した内容が取れないという不具合が・・・

さて、どうしたらキャッシュを読まないようにできるのか???

答えは、

setRequestHeader('Pragma', 'no-cache');
setRequestHeader('Cache-Control', 'no-cache');
setRequestHeader('If-Modified-Since', 'Thu, 01 Jun 1970 00:00:00 GMT');

こんな風にリクエストヘッダにキャッシュじゃなくて生データ送ってこいと指示するだけ。
昔はよくサーバの設定を確認したりするのに、telnet で 80番ポートに接続し、

GET / HTTP/1.1
Host: www.exsample.com
User-Agent: handPower
Pragma: no-cache
Cache-Control: no-cache
Accept: */*

とかやってたのに、パッと思いうかばないもんだな(^^;

というわけで、

//@cc_on
function getTextFile (fname) {

    var text = "";
    var ajax = new XMLHttpRequest();

    with (ajax) {
    /*@if(1) onreadystatechange @else@*/ onload /*@end@*/ =
    function () { readyState == 4 && status == 200 && (text = responseText); };
        open('GET', fname, false);
        overrideMimeType('text/html;charset=Shift_JIS');
        setRequestHeader('Pragma', 'no-cache');
        setRequestHeader('Cache-Control', 'no-cache');
        setRequestHeader('If-Modified-Since', 'Thu, 01 Jun 1970 00:00:00 GMT');
        send(null);
    };

    return text;

}

という具合に修正すればOK。

電気ウナギ的○○

電気ウナギ的○○

About Back

コメント(0)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

トラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/6192

電気ウナギ的○○

About This Site

電気ウナギ的○○
岩国在住。広島で働く超零細IT企業社長のいわゆる社長日記。
何か、酒と食い物のことばかり書いているようで・・・お察しのとおり、肥満体です:-)


2011/06/24
iPhone用サイト公開

Create with jQuery, jQTouch.


CLOSE