web-dev-qa-db-ja.com

キャッシュの設定方法:jQuery.get呼び出しでfalse

jQuery.get()は、get呼び出しを伴うjQuery.ajax()の省略形です。しかし、.get()呼び出しのデータにcache:falseを設定すると、サーバーに送信されるのは、値がfalseのcacheというパラメーターです。私の意図は、jQuery.ajaxデータでcache: falseを使用した場合に発生するキャッシングを防ぐために、データと共にタイムスタンプをサーバーに送信することです。 jQuery.get呼び出しをjQuery.ajax呼び出しに書き換えたり、

$.ajaxSetup({
    // Disable caching of AJAX responses
    cache: false
});

更新:回答ありがとうございます。あなたはすべて正しいです。ただし、getコールに、キャッシュしないことを知らせる方法、またはその値を基になる.ajax()に送信して、それをどう処理するかを知らせる方法があることを望んでいました。

私はこれまでに特定された3つの方法以外の4番目の方法を探しています。

  1. AjaxSetupを介してグローバルに行う

  2. .get呼び出しの代わりに.ajax呼び出しを使用する

  3. タイムスタンプを保持する新しいパラメーターを.get呼び出しに追加して、手動で実行します。

この機能は.get呼び出しに組み込む必要があると考えました。

72
Barka

私にとって、それを行う正しい方法はリストされているものでしょう。 ajaxまたはajaxSetupのいずれか。 getを本当に使用し、ajaxSetupを使用しない場合は、独自のパラメーターを作成して、現在の日付/時刻の値を指定できます。

しかし、他の方法のいずれかを使用しないことの動機に疑問を呈します。

35
James Montagne

自分でパラメータを追加します。

$.get(url,{ "_": $.now() }, function(rdata){
  console.log(rdata);
});

JQuery 3.0の時点で、これを行うことができます。

$.get({
  url: url, 
  cache: false
}).then(function(rdata){
  console.log(rdata);
});
96
Kevin B

代わりに、キャッシュをオフにできるAJAXメソッドを使用する必要があると思います。

$.ajax({
  url: "test.html",
  data: 'foo',
  success: function(){
    alert('bar');
  },
  cache: false
});
64
Jivings

JQueryドキュメントによると、.get()は、urldata(コンテンツ)、dataType、およびsuccessコールバックのみをパラメーターとして受け取ります。ここで本当にやりたいことは、送信される前にjqXHRオブジェクトを変更することです。 .ajax()を使用すると、これはbeforeSend()メソッドで実行されます。ただし、.get()はショートカットであるため、許可されません。

ただし、.ajax()呼び出しを.get()呼び出しに切り替えるのは比較的簡単です。結局、.get().ajax()のサブセットにすぎないため、.ajax()のすべてのデフォルト値を使用できます(もちろん、beforeSend()を除く)。

編集:

:: Jivingsの回答をご覧ください::

ああ、cacheパラメーターを忘れてしまいました! beforeSend()は他のヘッダーを追加するのに便利ですが、組み込みのcacheパラメーターはここでははるかに簡単です。

7
Thomas Kelley

キャッシュの設定:Belowメソッドを使用したjQuery.get呼び出しでfalse

同じミリ秒以内に複数のリクエストが発生しない限り、衝突を回避する新しいDate().getTime(),を使用します。

または

以下は、使用するjQueryメソッド($ .get、$。ajaxなど)に関係なく、将来のすべてのAJAX要求がキャッシュされないようにします。

$.ajaxSetup({ cache: false });
2
Sangeet Shah

コールバック構文は 非推奨 であることに注意してください。

廃止のお知らせ

JQuery 1.5で導入されたjqXHR.success()、jqXHR.error()、およびjqXHR.complete()コールバックメソッドは、jQuery 1.8で非推奨になりました。最終的な削除のためにコードを準備するには、代わりにjqXHR.done()、jqXHR.fail()、およびjqXHR.always()を使用します。

promiseインターフェイスを使用した最新のソリューション

$.ajax({url: "...", cache: false}).done(function( data ) {
    // data contains result
}).fail(function(err){
    // error
});
2
mar10

私はゲームに非常に遅れていますが、これは他の人を助けるかもしれません。 $ .getでこの同じ問題にぶつかり、盲目的にキャッシュをオフにしたくなかったし、タイムスタンプパッチが気に入らなかった。そのため、少し調査した結果、キャッシングを使用しない$ .getの代わりに$ .postを使用できることがわかりました。そのような単純な。 :)

0
RitchieD