Ich habe den folgenden Code, der eine GET-Anfrage für eine URL stellt:
$('#searchButton').click(function() {
$('#inquiry').load('/portal/?f=searchBilling&pid=' + $('#query').val());
});
Das zurückgegebene Ergebnis wird jedoch nicht immer wiedergegeben. Zum Beispiel habe ich eine Änderung in der Antwort vorgenommen, die eine Stapelverfolgung ausspuckte, aber die Stapelverfolgung wurde nicht angezeigt, als ich auf die Suchschaltfläche geklickt habe. Ich habe mir den zugrunde liegenden PHP-Code angesehen, der die Ajax-Antwort steuert, und er hatte den richtigen Code. Der direkte Besuch der Seite zeigte das richtige Ergebnis, aber die von .load zurückgegebene Ausgabe war alt.
Wenn ich den Browser schließe und wieder öffne, funktioniert er einmal und gibt dann die veralteten Informationen zurück. Kann ich dies über jQuery steuern oder benötige ich meine PHP-Skriptausgabeheader, um das Caching zu steuern?
Hier ist ein Beispiel für die Steuerung des Caching pro Anforderung
quelle
Eine Möglichkeit besteht darin, am Ende der URL eine eindeutige Nummer hinzuzufügen:
Wo Sie uniqueId () schreiben, um bei jedem Aufruf etwas anderes zurückzugeben.
quelle
(+new Date)
(odernew Date().getTime()
wenn Sie ein Stickler sind). Siehe Wie erhalten Sie einen Zeitstempel in JavaScript?Ein weiterer Ansatz, um die folgende Zeile nur dann einzufügen, wenn Daten vom Server abgerufen werden müssen. Fügen Sie die folgende Zeile zusammen mit Ihrer Ajax-URL hinzu.
'? _ =' + Math.round (Math.random () * 10000)
quelle
quelle
func.call(elem, data, textStatus, XMLHttpRequest);
Sasha ist eine gute Idee, ich benutze eine Mischung.
Ich erstelle eine Funktion
Und rufen Sie für verschiedene Teile meiner Seite auf, zum Beispiel auf init:
Init: function (actionUrl1, actionUrl2, actionUrl3) {
var ExampleJS = {
ExampleJS.LoadWithoutCache (actionUrl2, "div2"); ExampleJS.LoadWithoutCache (actionUrl3, "div3"); }},
quelle
Dies ist im IE besonders ärgerlich. Grundsätzlich müssen Sie HTTP-Header ohne Cache mit Ihrer Antwort vom Server zurücksenden.
quelle
Fügen Sie für PHP diese Zeile zu Ihrem Skript hinzu, das die gewünschten Informationen enthält:
Oder fügen Sie der Abfragezeichenfolge eine eindeutige Variable hinzu:
quelle
Verwenden Sie KEINEN Zeitstempel, um eine eindeutige URL zu erstellen, da jede Seite, die Sie besuchen, von jquery mobile im DOM zwischengespeichert wird und Sie bald Probleme haben, auf Mobiltelefonen nicht mehr genügend Speicherplatz zu haben.
Dieser Code wird aktiviert, bevor die Seite geladen wird. Mit url.indexOf () können Sie feststellen, ob die URL diejenige ist, die Sie zwischenspeichern möchten oder nicht, und den Cache-Parameter entsprechend festlegen.
Verwenden Sie nicht window.location = ""; Wenn Sie die URL ändern möchten, navigieren Sie zur Adresse und die Seite vor dem Laden wird nicht ausgelöst. Um dieses Problem zu umgehen, verwenden Sie einfach window.location.hash = "";
quelle
Wenn Sie sich an die .load () -Methode von Jquery halten möchten, fügen Sie der URL etwas Einzigartiges hinzu, z. B. einen JavaScript-Zeitstempel. "+ neues Datum (). getTime ()". Beachten Sie, dass ich ein "& time =" hinzufügen musste, damit Ihre PID-Variable nicht geändert wird.
quelle
Sie können die jquery load-Funktion durch eine Version ersetzen, deren Cache auf false gesetzt ist.
Platzieren Sie dies an einem globalen Ort, an dem es nach dem Laden der Abfrage ausgeführt wird, und Sie sollten bereit sein. Ihr vorhandener Ladecode wird nicht mehr zwischengespeichert.
quelle
Versuche dies:
Es funktioniert gut, wenn ich es benutzt habe.
quelle
Ich habe festgestellt, dass der Server standardmäßig eine "zwischengespeicherte" Antwort senden kann, wenn einige Server (wie Apache2) nicht so konfiguriert sind, dass sie ein "Caching" zulassen oder verweigern, selbst wenn Sie die HTTP-Header auf "No-Cache" setzen. Stellen Sie also sicher, dass Ihr Server nichts "zwischenspeichert", bevor er eine Antwort sendet:
Im Fall von Apache2 müssen Sie
1) Bearbeiten Sie die Datei "disk_cache.conf". Um den Cache zu deaktivieren, fügen Sie die Anweisung "CacheDisable / local_files" hinzu
2) mod_cache-Module laden (Unter Ubuntu "sudo a2enmod cache" und "sudo a2enmod disk_cache")
3) Starten Sie den Apache2 neu (Ubuntu "sudo service apache2 restart");
Dies sollte den Trick machen, den Cache auf der Serverseite zu deaktivieren. Prost! :) :)
quelle
Dieser Code kann Ihnen helfen
quelle