So legen Sie den Cache fest: false im jQuery.get-Aufruf
Lesezeit: 6 Minuten
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:
Tun Sie es global über ajaxSetup
Verwenden eines .ajax-Aufrufs anstelle eines .get-Aufrufs
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.
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:
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
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.
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
});
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
.
7105000cookie-checkSo legen Sie den Cache fest: false im jQuery.get-Aufrufyes
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