2016-04-25 16 views
0

Ich benutze die jquery.ajax Methoden, um GET-Anfragen an den Server zu senden, Caching sollte abgebrochen werden, so Cache ist auf falsch gesetzt, so weit so gut.jQuery.ajax, Cache und Zeitstempel

jQuery fügt der Anfrage-URL automatisch einen Zeitstempel hinzu (ich denke epoch-Millisekunden), um das Caching zu verhindern. Gibt es eine Möglichkeit, den von jQuery verwendeten Zeitstempel zu steuern? (Sogar Sekunden würde ausreichen, und helfen dem Server es das Caching richtig zu machen, ...)

Antwort

0

Ohne den Code von jQuery manuell zu ändern, nicht sauber.

Eintauchen in den jQuery-Code, sehen wir, dass die Nonce (die in diesem Fall nur der Zeitstempel ist), die von jQuery erzeugt wird, dort ziemlich hart-codiert ist.

https://github.com/jquery/jquery/blob/91850ecbbe04ad8f5d89dc050aa1d9002047c435/src/ajax.js (Linie 607)

Die nonce Variable wird übergeben, aber wenn wir folgen dem Weg zurück führt es zu jQuery.now(), die für (new Date).getTime() nur ein Alias ​​ist.

So Ihre Optionen sind:

1) Fügen Sie Ihren eigenen Wert auf jede URI manuell und nur jQuery Wert ignorieren.

2) Verschmutzt. Überschreiben Sie die now() Funktion von jQuery, um den gesuchten Wert zurückzugeben. Gibt mir Gänsehaut, wenn ich nur daran denke! Sie haben möglicherweise andere unerwartete Fehler als Folge davon, also würde ich es nicht empfehlen, aber es ist möglich. Wenn Sie immer noch einen Zeitstempel zurückgeben, der dem aktuellen nahekommt, wäre es vielleicht nicht so schlimm, aber das ist vielleicht gar nicht Ihr Fall. Ein naives Beispiel: https://jsfiddle.net/pf5pskg5/

+0

thx für die schnelle Antwort, also muss ich es manuell machen (nicht die schmutzige Version ;-)) – nabittened

0

Try this:

$.ajaxSetup({cache: false}); 

Was das bedeutet ist, den Browser sagen nie AJAX Anfragen zwischenzuspeichern.

Ich habe merkwürdiges Verhalten wegen der bestimmten Browsertendenz erfahren, zum von AJAX-Anforderungen, besonders wenn sie HTTP GET-Anforderungen sind, zu cachen.

IE 11 wird versuchen, seine zwischengespeicherte Version der AJAX-Anfragen zu verwenden UND LIEGE ÜBER DEN HTTP-STATUS, der vom Server zurückgegeben wird ("304 Not Modified"), wenn Sie das AJAX-Anforderungs-Caching nicht deaktivieren.

+0

das hilft mir nur, den Cache-Parameter false für alle zukünftigen Anfragen zu setzen. Ich möchte beeinflussen, welcher Zeitstempel verwendet wird, wenn Cache = false ist; – nabittened

+0

@nabittened Warum versuchst du das zu tun? Was versuchst du letztendlich zu erreichen? – amphetamachine

+0

Wenn die Zeitstempel voneinander getrennt sind, kann der Server weiterhin gleichzeitige Benutzeranforderungen zwischenspeichern. z.B. http://server.com/request?_12345 (man stelle sich einige Millisekunden Beispiel) und http://server.com/request?_12346 kann nicht vom Server zwischengespeichert werden, Ereignis, wenn der Inhalt hat sich nicht geändert in diese Zeitperiode während http://server.com/request?_12 und http://server.com/request?_12 noch im Cache gespeichert und http://server.com/request werden könnte? _13 wäre ein neues (von einem anderen oder dem selben Benutzer) – nabittened