2014-06-20 8 views
7

Ich bemerkte, dass D3-Elemente mit seinem json-Aufruf (d3.json) neu zu zeichnen nicht auf IE9 + aktualisiert werden soll. Der Grund dafür ist, dass JSON-Aufrufe zwischengespeichert werden, so dass der Browser nicht registriert wird, da neue Daten übergeben wurden. Abhilfe für normale jQuery Ajax-Aufrufe ist seine Eigenschaft Cache zu setzen: false, global für alle Ajax-Aufrufe:D3.json Setup-Cache auf false

$.ajaxSetup({ cache: false }); 

Aber wie kann ich hinzufügen, es zu d3.json Anrufe, da ihre Verwendung eine eigene Methode für Ajax-Aufruf? Es gelang mir, mit dem Hinzufügen von aktuellen Zeitstempel nach dem Pfad:

var noCache = new Date().getTime(); 
d3.json(data + "?_=" + noCache) 

aber das ist ein bisschen lahm Weg, es zu tun ... irgendwelche Vorschläge, wie kann ich das erreichen? Oder noch besser, wie man das nur einrichtet, wenn IE läuft :)

+0

Ich denke, es ist wahrscheinlich einfacher, hier JQuery zu verwenden. –

+0

Sie sind in etwa richtig. Ich habe alle Anrufe von 'd3.json' in' $ .ajax' geändert. Jetzt stoße ich auf ein anderes Problem, wie man bestimmt, ob Browser IE ist, oder wenn Browser IE10-11 ist? Da sie die bedingten Kommentare 'IF IE' aus diesen Versionen entfernt haben. Immer noch auf der Suche nach einer Antwort im Web, kann aber keine richtige finden – Alchnemesis

Antwort

0

Ich hatte das gleiche Problem. Ich löste es, indem ich diesen Code zum HEAD des HTML-Dokuments hinzufügte.

<meta http-equiv="cache-control" content="no-cache"> 
<meta http-equiv="expires" content="0"> 
<meta http-equiv="pragma" content="no-cache"> 

Dies verhindert jedoch das Zwischenspeichern jedes Objekts in einer bestimmten Seite, also seien Sie vorsichtig mit Bildern, Schriftarten und anderen.

+0

Sie wollen nur den Cache für die AJAX-Anfrage ungültig machen, nicht den Cache für die gesamte Seite. Sie sollten dies nur tun, wenn Sie nicht möchten, dass Ihre Seite ALLES zwischengespeichert wird, was nicht ideal für Websites ist, auf denen Sie wiederbesucht werden. Cache ist dein Freund! – aboutaaron