Können Sie den Jquery Ajax Cache löschen?

8

Ich frage mich, ob es möglich ist, den Cache von einer bestimmten AJAX-Methode zu löschen.

Sagen Sie, ich habe das:

%Vor%

Jetzt, 99% der Zeit, kann ein zwischengespeichertes Ergebnis verwendet werden, da es immer denselben Inhalt haben sollte. Wenn ein Benutzer diesen Inhalt aktualisiert, ändert er sich (natürlich). Wenn es zwischengespeichert wird, würde es immer noch den alten Inhalt anzeigen.

Es wäre also cool, wenn ich diesen Cache für diese Methode auswählen und löschen könnte und alle anderen zwischengespeicherten Sachen bleiben würden.

Kann das gemacht werden?

Bearbeiten

Ich folge nicht. Ich sehe, dass, wenn Sie cache auf false setzen, eine eindeutige URL erstellt wird, um zu verhindern, dass der Browser sie zwischenspeichert.

Mein Problem ist, dass ich möchte, dass es zwischengespeichert wird, bis jemand es aktualisiert. Dann sollte es nicht zwischengespeichert werden, bis sie erneut darauf klicken. Dann sollte es erneut zwischengespeichert werden.

Grundsätzlich habe ich ein Update-Modell-Dialogfeld (jquery UI), das ein Update-Formular anzeigt, damit Benutzer eine Tabellenzeile aktualisieren können. Wenn sie auf "Aktualisieren" klicken, wird diese Tabellenzeile aktualisiert. Jetzt kann eine Spalte, wie ein paar Absätze Daten haben, und es macht die Tabelle schlecht aussehen.

Um den Tisch zu erhalten, habe ich einen Link namens "Show Data". Wenn Sie darauf klicken, wird eine Dialogbox angezeigt und die Daten werden vom Server abgerufen.

Wenn sie 5 Mal darauf klicken, wird es 5 Mal neu geladen. Deshalb möchte ich es zwischenspeichern. Wenn sie jedoch darauf klicken und sie zwischengespeichert wird, dann gehen sie aus irgendeinem Grund und aktualisieren diese Zeile und klicken auf "Show Data", sie erhalten die zwischengespeicherte Version, nicht die aktualisierte Version.

Ich könnte wahrscheinlich alle Absätze verstecken und sie mit jQuery zeigen, aber ich würde es lieber auf Nachfrage haben. Sonst wird so viel Mist versteckt und es wird die Seite verlangsamen (stell dir vor, wenn ein Typ 50 Zeilen hat und jede dieser Spalten wie 1000 Zeichen hat).

    
chobo2 02.06.2010, 19:10
quelle

1 Antwort

10

Sie missverstehen den Standardparameter cache: true von $.ajax . In der Dokumentation finden Sie folgendes:

  

Wenn der Wert auf "false" gesetzt ist, wird der Befehl "   Seiten, die Sie nicht möchten   zwischengespeichert durch den Browser.

Um zu verstehen, was dieser Parameter wirklich tut, sollten Sie sich den jQuery-Quellcode ansehen:

%Vor%

Wenn Sie also cache: false verwenden, fügt jQuery der URL nur einen zusätzlichen Parameter mit der aktuellen Uhrzeit hinzu. Der Browser sieht dann eine andere URL und entscheidet, dass sich keine Daten in seinem Cache mit dieser URL befinden, sodass die Anforderung an den Server weitergeleitet wird. Nichts mehr.

AKTUALISIERT basierend auf dem bearbeiteten Teil der Frage: Wenn ich Sie richtig verstehe, möchten Sie den lokalen Browser-Cache verwenden, aber Sie möchten ihn steuern. In diesem Fall sollten Sie den Standardwert cache: true verwenden (fügen Sie diesen Parameter nicht in $.ajax hinzu). Anstatt von der Option $.ajax() abhängig zu sein, sollten Sie Ihrer Serverantwort zusätzliche Caching-Informationen hinzufügen. Browser folgen immer explizit Caching-Anweisungen, wie sie in den entsprechenden Seitenkopf geschrieben sind.

So können Sie beispielsweise dem Antwortkopf eine Zeit hinzufügen, die angibt, wie lange die Seite gültig ist. Es ist sehr effektiv, wenn Sie nicht die absolut letzte Version der Daten auf dem Client benötigen (siehe Ссылка ).

Eine andere Möglichkeit, die ich in den meisten meiner Anwendungen verwende, besteht darin, den Header der Serverantwort Folgendes hinzuzufügen:

  1. "Cache-Control" auf "max-age = 0" gesetzt, wodurch das lokale Caching ausgeschaltet wird
  2. "Etag" mit einem gewissen Wert (z. B. einem MD5-Hash der gesendeten Daten), um zu identifizieren, was die Daten enthalten. Der Wert ist absolut frei, Sie können ihn beliebig berechnen, aber zwei verschiedene Antworten sollten unterschiedliche "Etag" -Werte haben.

Diese Methode eignet sich sehr gut für dynamische Inhalte (z. B. für eine Antwort basierend auf den Daten aus der Datenbank), wenn Sie immer die neueste Version der Daten haben möchten, aber nicht möchten, dass der Server die Daten sendet erneut, wenn es sich seit der letzten Antwort nicht geändert hat. Wenn Sie dieser Methode folgen, fügt der Browser (jeder Browser) dem Header der Daten, die an den Server gesendet werden, beim zweiten Klick auf die Schaltfläche "Daten anzeigen" den Wert "Etag" von der lokal geholten Seite der "If-None-Match" HTTP-Anfrage hinzu Header. Dann kann der Server festlegen, ob die Daten geändert werden. Wenn nicht, kann der Server mit einer Antwort leer und "304 Not Modified" anstelle von "200 OK" antworten. Der Browser weiß dies und er erhält die Daten direkt aus dem lokalen Bargeld. So wird Ihre $.ajax Anfrage erfolgreich beendet und Sie erhalten die Daten aus dem lokalen Bargeld.

Sie können zwei Möglichkeiten kombinieren. Setzen Sie einfach anstelle von "max-age = 0" einen Wert ungleich Null, der die Zeit in Sekunden der Gültigkeit des lokalen Geldes ist (siehe Ссылка )

    
Oleg 02.06.2010, 19:19
quelle

Tags und Links