XMLHttpRequest でキャッシュを無効にするリクエスト[プログラミング]
(2022-03-26 21:23:48) by shinoda


< ページ移動: 1 2 >

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);
    };

< ページ移動: 1 2 >


コメント投稿
次の記事へ >
< 前の記事へ
TOPへ戻る

Powered by
MT4i 3.0.8