So legen Sie den Cache fest: false im jQuery.get-Aufruf

Lesezeit: 6 Minuten

So legen Sie den Cache fest false im jQueryget Aufruf
Barka

jQuery.get() ist eine Abkürzung für jQuery.ajax() mit einem Get-Aufruf. Aber wenn ich setze cache:false in den Daten der .get() aufrufen, wird ein Parameter namens cache mit dem Wert false an den Server gesendet. Meine Absicht ist es, einen Zeitstempel mit den Daten an den Server zu senden, um das Caching zu verhindern, was passiert, wenn ich es verwende cache: false in jQuery.ajax-Daten. Wie erreiche ich dies, ohne meine jQuery.get-Aufrufe in jQuery.ajax-Aufrufe umzuschreiben oder zu verwenden

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

update: Danke an alle für die Antworten. Sie haben alle recht. Ich hatte jedoch gehofft, dass es eine Möglichkeit gibt, den Get-Aufruf wissen zu lassen, dass Sie nicht zwischenspeichern möchten, oder diesen Wert an die zugrunde liegende .ajax() zu senden, damit er weiß, was damit zu tun ist.

ich ein. Suchen Sie nach einem vierten Weg, der sich von den drei bisher identifizierten unterscheidet:

  1. Tun Sie es global über ajaxSetup

  2. Verwenden eines .ajax-Aufrufs anstelle eines .get-Aufrufs

  3. Tun Sie dies manuell, indem Sie Ihrem .get-Aufruf einen neuen Parameter hinzufügen, der einen Zeitstempel enthält.

Ich dachte nur, dass diese Fähigkeit in den .get-Aufruf eingebaut werden sollte.

  • Zeigen Sie das Ganze get() Beispiel?

    – Jivings

    12. Januar 12 um 20:02 Uhr

  • Ich übergebe gerne das Datum/die Uhrzeit einer Datei mit der Seite (vorausgesetzt, ich verwende eine serverseitige Skriptsprache) und übergebe dies dann mit der Anforderung für die Seite als Querystring-Parameter. Der Grund, warum ich dies tue, ist, dass es Caching ermöglicht, es sei denn, die Seite hat sich tatsächlich geändert.

    – Wiedereinsetzung von Monica Cellio

    12. Januar 12 um 20:07 Uhr

  • Die Verwendung von cache:false fügt einen Zeitstempel an die Ajax/json-Anforderung an, z. B. {“get”:”modified”}&_=1394836303603, wodurch meine API-Anforderungen beschädigt wurden. Es hat viel zu viele Stunden gedauert, um herauszufinden, was den Zeitstempel hinzugefügt hat, da er in den jQuery-Dokumenten vergraben ist. Anstatt cache:false zu verwenden, fügen Sie einfach Ihren eigenen Zeitstempel hinzu, vorausgesetzt, Ihre API kümmert sich nicht darum, ob Sie einen unbekannten Parameter hinzufügen. Etwa so: {“get”:”modified”, “timestamp”:”1394836303603″} Dadurch haben Sie auch eine genauere Kontrolle darüber, welche Elemente zwischengespeichert werden und welche nicht.

    – Jim Bergmann

    15. März 14 um 1:18 Uhr


  • Warum möchten Sie $.ajaxSetup nicht verwenden? Es ist einfach und erledigt die Arbeit.

    – nützliche Biene

    4. April 14 um 16:33 Uhr

So legen Sie den Cache fest false im jQueryget Aufruf
Kevin B

Fügen Sie den Parameter selbst hinzu.

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

Ab jQuery 3.0 können Sie dies jetzt tun:

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

  • danke $.now() ist die Abkürzung für new Date().getTime(). api.jquery.com/jQuery.now

    – Barka

    12. Januar 12 um 21:36 Uhr

  • Kannst du jetzt auch machen Date.now().

    – Jivings

    7. August 14 um 8:14 Uhr

  • oder, da wir jquery haben, verwenden Sie einfach, was wir haben. 🙂

    – Kevin B

    13. Januar 16 um 19:04 Uhr

  • Dies sollte die akzeptierte Antwort sein … da das OP speziell danach gefragt hat $.get();

    – Serj Sagan

    22. Januar 16 um 10:47 Uhr

  • @SerjSagan Ich bin damit nicht einverstanden, da vor jQuery 3.0 die bessere Option die Verwendung von $ .ajax wäre. in 3.0 kann $.get auch ein Optionsobjekt akzeptieren. 🙂

    – Kevin B

    26. Januar 16 um 23:32 Uhr

Ich denke, Sie müssen stattdessen die AJAX-Methode verwenden, mit der Sie das Caching deaktivieren können:

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

  • IE9 cachet und scheint .get wirklich nicht zu mögen

    – Roß

    5. Mai 12 um 0:49 Uhr

  • @Ross Es sollte nicht funktionieren, wenn Sie festlegen cache zu false nach meiner Antwort.

    – Jivings

    5. Mai 2012 um 18:06 Uhr

  • 3 Jahre später und ich habe gerade einen halben Tag wegen genau des gleichen Problems verloren

    – Joel

    25. Februar 15 um 22:57 Uhr

  • @Joel Haha, froh, dass ich helfen konnte 🙂

    – Jivings

    26. Februar 15 um 9:08 Uhr

  • Sechs Jahre später und ich verlor einen halben Tag wegen des gleichen Problems…

    – Brian Stina

    22. Januar 21 um 1:58 Uhr

Für mich wäre der richtige Weg, dies zu tun, die aufgelisteten. Entweder ajax oder ajaxSetup. Wenn Sie wirklich verwenden möchten get und nicht verwenden ajaxSetup dann könnten Sie Ihren eigenen Parameter erstellen und ihm den Wert des aktuellen Datums/der aktuellen Uhrzeit geben.

Ich würde jedoch Ihre Motive hinterfragen, warum Sie keine der anderen Methoden anwenden.

  • Erwähnenswert ist, dass ich in meiner speziellen App cache: false in ajaxSetup verwende (die meisten meiner Aufrufe gehen an json-Endpunkte für Payloads) und dann $.ajax(…, cache: true) für bestimmte Vorlagen oder Dinge verwende die ich zwischengespeichert haben möchte. Ich bevorzuge dies sowieso, da es die Dinge ziemlich deutlich macht und ich mehr Nutzlastaufrufe als statische Daten aufrufe.

    – David

    16. Februar 13 um 19:23 Uhr


So legen Sie den Cache fest false im jQueryget Aufruf
Thomas Kelly

Gemäß der JQuery-Dokumentation .get() nimmt nur die url, data (Inhalt), dataTypeund success Callback als seine Parameter. Was Sie hier wirklich tun möchten, ist das jqXHR-Objekt zu ändern, bevor es gesendet wird. Mit .ajax()dies geschieht mit der beforeSend() Methode. Aber seit .get() ist eine Verknüpfung, es erlaubt es nicht.

Der Wechsel sollte relativ einfach sein .ajax() Anrufe zu .get() ruft aber an. Schließlich, .get() ist nur eine Teilmenge von .ajax()sodass Sie wahrscheinlich alle Standardwerte für verwenden können .ajax() (außer natürlich z beforeSend()).

Bearbeiten:

::Sieht sich die Antwort von Jivings an::

Ach ja, die vergessen cache Parameter! Während beforeSend() ist nützlich, um andere Header hinzuzufügen, die eingebaute cache Parameter ist hier viel einfacher.

1643608869 953 So legen Sie den Cache fest false im jQueryget Aufruf
Sangeet Schah

Cache festlegen: false in jQuery.get-Aufruf mit Below-Methode

neu verwenden Date().getTime(), Dadurch werden Kollisionen vermieden, es sei denn, Sie haben mehrere Anfragen innerhalb derselben Millisekunde.

Oder

Folgendes verhindert, dass alle zukünftigen AJAX-Anforderungen zwischengespeichert werden, unabhängig davon, welche jQuery-Methode Sie verwenden ($.get, $.ajax usw.).

$.ajaxSetup({ cache: false });

Beachten Sie, dass die Callback-Syntax ist veraltet:

Abschreibungshinweis

Die Callback-Methoden jqXHR.success(), jqXHR.error() und jqXHR.complete(), die in jQuery 1.5 eingeführt wurden, sind ab jQuery 1.8 veraltet. Um Ihren Code für die eventuelle Entfernung vorzubereiten, verwenden Sie stattdessen jqXHR.done(), jqXHR.fail() und jqXHR.always().

Hier eine modernisierte Lösung mit der promise Schnittstelle

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

1643608870 373 So legen Sie den Cache fest false im jQueryget Aufruf
Ritchie D

Ich bin sehr spät im Spiel, aber das könnte anderen helfen. Ich hatte das gleiche Problem mit $.get und ich wollte das Caching nicht blind ausschalten und ich mochte den Timestamp-Patch nicht. Nach ein wenig Recherche fand ich heraus, dass Sie einfach $.post anstelle von $.get verwenden können, das KEIN Caching verwendet. So einfach ist das. 🙂

  • Ich bin auch spät 🙂 Danke für deinen Beitrag, es funktioniert gut

    – Engel M.

    3. September 15 um 9:23 Uhr


  • Dies ist ein schlechter Rat, da GET und POST verschiedene Verben sind und für verschiedene Dinge verwendet werden sollten. Dieselbe Server-URL wird möglicherweise nach Verben gefiltert, sodass beispielsweise ein POST nicht funktioniert, wenn der Server nur ein GET erwartet. Oder noch schlimmer, der Server hat möglicherweise unterschiedliche Verhaltensweisen für GET und POST (was eigentlich sehr häufig vorkommt).

    – Andreas

    7. Januar 18 um 08:53 Uhr

  • @Andrew: Wenn nicht, hatte jquery ajax immer den Fehler, sich für get an erster Stelle zu entscheiden, während das so ist nicht posten und nicht das richtige Verb für Ajax. Post ist also in Ordnung. und Korrekt.

    – hakre

    4. Juli 21 um 7:07 Uhr


  • Ich bin mir nicht sicher, ob ich verstehe, was du meinst. Wenn Sie eine verwenden get anstelle einer post, das ist auch falsch. Du solltest benutzen get oder post je nachdem, was der Endpunkt tut und nicht verwendet post um Caching-Probleme zu lösen get.

    – Andreas

    5. Juli 21 um 0:02 Uhr


.

710500cookie-checkSo legen Sie den Cache fest: false im jQuery.get-Aufruf

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy