1

最初に、私の悪い英語を申し訳ありませんと言いたいです。

Google Chrome、Mozilla Firefox、Opera の最新バージョンの jquery v2.0.0

今日、私は問題を抱えていました

timer_multy_update = setInterval(
    function()
    {
        $.get(
           'test.php',
           function (result){
              parseAndUpdateData(result);
           },
           "json"
        );
    }, 500)

問題は、サーバーがハングした場合 (正確な言い方がわかりません)、つまり、サーバーから応答を得るまでに 0.5 秒以上かかるが、タイマーは停止せず、リクエストを送信し続けるため、サーバーの前に答えは2-4のリクエストを送ることができ、このすべての答えは少しの間返されます。そして今問題は、firebugですべてのリクエストが正しいですが、変数resultにはサーバーからの最初の答えからの答えが1つしか含まれていません。言い方が悪いのかもしれませんが、サーバーへの2~4回のリクエストで異なる回答が返ってきたのですが、結果的にサーバーからの最初の回答の2~4回全てが返ってきてしまい、大問題です。

インターネットで情報を見つけようとしましたが、何も見つかりませんでした。

理由はわかりませんが、最初に考えたのは、jquery のエラーでした。ソース コードを調べ始めたところ、ヘダーとそのハッシュについての言及が見つかりました。だから私は自分のスクリプトを変更して方法を見つけようとします

$.get
(
    '/php/mine/update_cells.php',
    't='+Math.random(),
    function (result)
    {
        parseAndUpdateData(result);
    },
    "json"
);

それは正しく動作するので、私は今したいです、それはバグであるか、私の間違いであり、理解していません

4

1 に答える 1

0

これはバグではなく、キャッシュです。ブラウザがリソースをしばらくキャッシュしてから、誰かがそれを必要とするたびに取得しなければならない方がはるかに効率的です。これは静的リソース、つまりあまり変化しないリソースでは問題ありませんが、同じ URL に対して頻繁に異なる結果を返す Web サービスでは、キャッシュを無効にする必要があります。Cache-Control: no-cacheサーバー側のコードを制御する場合は、応答にヘッダーを追加します。jQuery でキャッシュを無効にすることはできますが、私の知る限り、ajax()関数を使用する必要がありget()ます。

$.ajax({
  url: "/php/mine/update_cells.php",
  success: function(result){
     parseAndUpdateData(result);
  },
  cache: false,
  dataType: 'json'
});
于 2013-08-24T06:50:09.377 に答える