Caching in XHR funktioniert nicht

8

Ich hole Blade-HTML mit XHR GET und versuche, es zwischenzuspeichern, damit es nicht jedes Mal zum Server gehen muss, um es herunterzuladen. Hier ist mein Code.

Aber das funktioniert nicht und geht immer zum Server.

%Vor%

Controller

%Vor%

Kopfzeileninformationen

    
Pankaj 31.07.2017, 01:06
quelle

3 Antworten

3

Es ist eigentlich nicht die Schuld von jQuery. Nach der Dokumentation:

  

Die Einstellung von cache auf false funktioniert nur mit HEAD- und GET-Anfragen. Es funktioniert durch Anhängen von "_={timestamp}" an die GET-Parameter.

Also zwingt es den Browser tatsächlich, eine neue Kopie der angeforderten Ressource zu laden, indem er sie durch Ändern der URL trickst. Daher denkt der Browser, dass es sich um eine neue Anfrage handelt, und lädt sie dann erneut vom Server. Es nicht tatsächlich die Antwort irgendwo zwischen.

Das Zwischenspeichern der Antworten ist ein Teil des Browsers, und um diese Rolle zu spielen, benötigt es entsprechende Cache-Header. Ich kann sehen, Ihre Antwort enthält keine passenden Header, wie von @elegisandi in den Kommentaren angegeben. Also gibt es zwei mögliche Lösungen für dieses Problem.

Hinzufügen von Cache-Headern zur Serverantwort

Sie müssen die Antwortheader ändern, damit der Browser die Antwort zwischenspeichern kann. Diese Frage und ihre Antworten können Ihnen bei der Einrichtung helfen.

Die Antwort manuell zwischenspeichern

Sie können die Antwort der Anforderungen in einem JavaScript-Objekt manuell zwischenspeichern. Aber Vorsicht, Sie müssen diese manuell ablaufen lassen. Hier ist ein Beispiel dafür:

%Vor%

Wenn Sie eine Anforderung zum zweiten Mal an dieselbe URL senden, wird die Antwort tatsächlich vom Cache zurückgegeben. Außerdem können wir die Funktion ajaxCall so anpassen, dass sie auch die Anforderungsmethode überprüft.

    
31piy 03.08.2017 05:03
quelle
1

Die Option jQuery ajax cache ( Ссылка ) kontrolliert nur, ob der Browser die Option verwenden kann normale Caching-Strategien. Die Standardeinstellung lautet true .

Um das Caching hier tatsächlich zu nutzen, sollte der Server (Ihre Laravel-Anwendung) dem Client mitteilen, dass den Rückgabewert zwischenspeichern kann.

Im Moment ( Cache-Control: no-cache, private ) verbietet es dem Client ausdrücklich, das Ergebnis zwischenzuspeichern. Der Header Cache-Control ist sehr vielseitig (siehe Ссылка ), aber Sie könnte beispielsweise einen Wert von Cache-Control: public zurückgeben, um dem Client mitzuteilen, dass die Ressource öffentlich ist und immer zwischengespeichert werden kann.

Sie können dies in Ihrer Controller-Aktion wie folgt tun:

%Vor%     
Tim van Dalen 04.08.2017 07:57
quelle
1

Sie müssen das Antwortverhalten auf der Serverseite ändern:

%Vor%     
Govind Samrow 09.08.2017 10:05
quelle