jQuery.get()
ist eine Abkürzung für jQuery.ajax()
mit einem get call. Wenn ich jedoch cache:false
die Daten des .get()
Aufrufs einstelle , wird an den Server ein Parameter namens Cache mit dem Wert false gesendet. Während meine Absicht ist, einen Zeitstempel mit den Daten an den Server zu senden, um das Caching zu verhindern, was passiert, wenn ich cache: false
in jQuery.ajax-Daten verwende. Wie kann ich dies erreichen, ohne meine jQuery.get-Aufrufe in jQuery.ajax-Aufrufe umzuschreiben oder zu verwenden?
$.ajaxSetup({
// Disable caching of AJAX responses
cache: false
});
Update: Vielen Dank an alle für die Antworten. Sie sind alle richtig. Ich hatte jedoch gehofft, dass es eine Möglichkeit gibt, dem get-Aufruf mitzuteilen, 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 a. Suche nach einem anderen vierten Weg als den drei bisher identifizierten Wegen:
Global über ajaxSetup
Verwenden eines .ajax-Aufrufs anstelle eines .get-Aufrufs
Führen Sie dies manuell aus, indem Sie Ihrem .get-Aufruf einen neuen Parameter hinzufügen, der einen Zeitstempel enthält.
Ich dachte nur, dass diese Funktion in den .get-Aufruf integriert werden sollte.
get()
Beispiel zeigen?Antworten:
Für mich wäre die richtige Vorgehensweise die aufgeführte. Entweder
ajax
oderajaxSetup
. Wenn Sie wirklich verwendenget
und nicht verwenden möchten, könnenajaxSetup
Sie Ihren eigenen Parameter erstellen und ihm den Wert des aktuellen Datums / der aktuellen Uhrzeit geben.Ich würde jedoch Ihre Motive in Frage stellen, keine der anderen Methoden anzuwenden.
quelle
Fügen Sie den Parameter selbst hinzu.
$.get(url,{ "_": $.now() }, function(rdata){ console.log(rdata); });
Ab jQuery 3.0 können Sie Folgendes tun:
$.get({ url: url, cache: false }).then(function(rdata){ console.log(rdata); });
quelle
Date.now()
.$.get();
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 });
quelle
cache
umfalse
wie pro meine Antwort.Per der JQuery Dokumentation,
.get()
nimmt nur denurl
,data
(Inhalt),dataType
undsuccess
Callback als Parameter. Was Sie hier wirklich tun möchten, ist, das jqXHR-Objekt zu ändern, bevor es gesendet wird. Mit.ajax()
erfolgt dies mit derbeforeSend()
Methode. Da.get()
es sich jedoch um eine Verknüpfung handelt, ist sie nicht zulässig.Es sollte jedoch relativ einfach sein, Ihre
.ajax()
Anrufe auf.get()
Anrufe umzustellen . Immerhin.get()
handelt es sich nur um eine Teilmenge von.ajax()
, sodass Sie wahrscheinlich alle Standardwerte für verwenden können.ajax()
(außer natürlich fürbeforeSend()
).Bearbeiten:
:: Sieht sich Jivings 'Antwort an ::
Oh ja, den
cache
Parameter vergessen ! WährendbeforeSend()
es nützlich ist, andere Header hinzuzufügen, ist der eingebautecache
Parameter hier viel einfacher.quelle
Setzen Sie den Cache: false im Aufruf von jQuery.get mit der Below-Methode
Verwenden Sie new
Date().getTime(),
, um Kollisionen zu vermeiden, es sei denn, Sie haben mehrere Anforderungen innerhalb derselben Millisekunde.Oder
Im Folgenden wird verhindert, dass alle zukünftigen AJAX-Anforderungen zwischengespeichert werden, unabhängig davon, welche jQuery-Methode Sie verwenden ($ .get, $ .ajax usw.).
$.ajaxSetup({ cache: false });
quelle
Beachten Sie, dass die Rückrufsyntax veraltet ist :
Hier eine modernisierte Lösung über die
promise
Schnittstelle$.ajax({url: "...", cache: false}).done(function( data ) { // data contains result }).fail(function(err){ // error });
quelle
Ich bin sehr spät im Spiel, aber das könnte anderen helfen. Ich habe das gleiche Problem mit $ .get festgestellt und wollte das Caching nicht blind deaktivieren, und der Zeitstempel-Patch hat mir nicht gefallen. Nach ein wenig Recherche stellte ich fest, dass Sie einfach $ .post anstelle von $ .get verwenden können, das KEIN Caching verwendet. So einfach ist das. :) :)
quelle