3

phpファイルへのajaxリクエストを行うjavascript関数(ボタンで呼び出されます)があります。phpファイルはデータベースに接続し、データベースからランダムな行をエコーし​​ます。これを担当するphpコード:

$value = $db->get_row("SELECT * FROM mytable ORDER BY RAND() LIMIT 1");
echo $value;

すべてが正常に動作します!すべてのブラウザ(IEを除く)で、ボタンを押すと毎回ランダムな行を取得できます。ただし、IEでは、ページを更新するまで同じ行が表示されます。IEのすべてのバージョンで試しましたが、ページを更新するまで行は変更されません。

それが何であるかについて何か考えはありますか?

前もって感謝します!

その他のコードは次のとおりです。

function getdata(){
    var data = $.ajax({
            url: "getmydata.php",
            async: false
        }).responseText;

    passdata(data); 
}

編集:ORDER BY RANDが悪いことは知っていますが、行は10行しかありません!

4

1 に答える 1

4

はい、IEは、リクエストを積極的にキャッシュし、コンテンツをキャッシュしないようにHTTPヘッダーを無視することで有名です。私たちのアプリケーションでは、サーバーから更新する必要のあるAJAXリクエストがある場合、URLでキャッシュバスティング乱数を使用します。

url: "getmydata.php?rand="+Math.random()

クエリ文字列パラメータ?を追加するために使用されます。これらのパラメータを処理しない場合、リクエストには影響しません。URLは毎回一意であるため、キャッシュすることはできません。


編集:@ GNi33で指摘されているように、jQuery.ajaxには、次のように設定されたパラメーターを使用してキャッシュバスティングを強制する機能がすでに組み込まれcacheいますfalse

var data = $.ajax({
    url: "getmydata.php",
    cache: false,    /* ADD THIS to prevent IE caching */
    async: false
}).responseText;

これらのソリューションのいずれかで十分です。

于 2013-03-22T02:28:58.617 に答える