Ich spiele gerade mit ASP.net MVC und JQuery herum. Ich bin auf ein Verhalten gestoßen, das keinen Sinn ergibt.
Ich rufe die $.getJSON
Funktion von JQuery auf , um einige Divs zu füllen. Das Ereignis wird für das $(document).ready
Ereignis ausgelöst . Das funktioniert perfekt.
Es gibt einen kleinen AJAX.BeginForm
Wert, der einen weiteren Wert hinzufügt, der beim Auffüllen der Divs verwendet werden soll. Es ruft die Remote-Funktion korrekt auf und ruft bei Erfolg die ursprüngliche Javascript-Funktion auf, um die Divs neu zu füllen.
Hier ist der seltsame Teil: In FireFox und Chrome - Alles funktioniert. ABER In IE8 (Beta) werden bei diesem zweiten Aufruf des Populate Div-Skripts (das die Funktion $ .getJSON aufruft) zwischengespeicherte Daten abgerufen und der Server nicht gefragt!
Hoffe, diese Frage macht Sinn: Kurz gesagt - Warum werden $.getJSON
zwischengespeicherte Daten abgerufen? Und warum wirkt es sich nur auf IE8 aus?
quelle
Antworten:
Nur um Sie wissen zu lassen, betrachten Firefox und Chrome alle Ajax-Anfragen als nicht zwischenspeicherbar. IE (alle Versionen) behandeln Ajax-Aufruf genauso wie andere Webanfragen. Deshalb sehen Sie dieses Verhalten.
So zwingen Sie den IE, bei jeder Anforderung Daten herunterzuladen:
Code:
quelle
So hat es bei mir funktioniert ...
quelle
$.ajaxSetup({ cache: true });
direkt nach demgetJSON()
und nicht im Rückruf anrufen .Danke Kent für deine Antwort. Using $ .ajax ('{cache: no}'); hat perfekt funktioniert. [bearbeiten]
Zumindest dachte ich, ich hätte es getan. Scheint, dass die Abfrage $ .getJSON keine Änderungen liest, die am $ .ajax-Objekt vorgenommen wurden.
Die Lösung bestand darin, manuell einen neuen Parameter hinzuzufügen
Die Datumsauflösung ist nur auf die Minute genau. Dies bedeutet effektiv, dass diese Lösung noch bis zu einer Minute zwischengespeichert wird. Dies ist für meine Zwecke akzeptabel.
quelle
Math.Random()
könnte verwendet werden, seine Ergebnisse sind unbekannt und Sie erhalten möglicherweise zweimal hintereinander dieselbe Nummer (oder mehr). Mitnew Date().getTime()
wird sichergestellt, dass es niemals wiederholt wird. (es sei denn, Sie können in der Zeit zurückgehen;))Ich habe dasselbe Problem gelöst, indem ich das folgende Attribut für die Aktion im Controller platziert habe:
quelle
Wenn Sie ASP.net MVC verwenden, sollten Sie eine Erweiterungsmethode hinzufügen, um auf einfache Weise kein Caching wie folgt zu implementieren:
quelle
Möglicherweise müssen Sie einen Cache-Breaker senden.
Ich würde empfehlen, $ .ajax ({cache: no}) nur für den Fall zu verwenden (fügt der get-Anfrage ein zufälliges Suffix hinzu)
(Ich benutze heutzutage überall $ .ajax, besser abstimmbar)
quelle
Bereit für die Antwort?
http://lestopher.tumblr.com/post/21742012438/if-youre-using-ie8-and-getjson
Also einfach hinzufügen
am Anfang deines Skripts und BANG funktioniert es!
quelle