2014-06-20 7 views
7

Ho notato che il ridisegno di elementi D3 con la sua chiamata json (d3.json) non si desidera essere aggiornato su IE9 +. Il motivo è che le chiamate json vengono memorizzate nella cache in modo che il browser non si registri quando sono stati passati nuovi dati. Soluzione per le normali chiamate ajax jQuery è quello di impostare la proprietà alla cache: false, a livello globale per tutte le chiamate Ajax:D3.json impostazione cache su false

$.ajaxSetup({ cache: false }); 

Ma come posso aggiungerlo al d3.json chiamate, dal momento che il suo metodo proprio utilizzando per chiamare Ajax? Sono riuscito con l'aggiunta di timestamp corrente dopo percorso:

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

ma questo è un modo zoppo po 'per farlo ... qualche suggerimento come posso ottenere questo risultato? O ancora meglio, come configurare questo solo se IE è in esecuzione :)

+0

Penso che sia probabilmente più facile usare JQuery qui. –

+0

Hai ragione. Ho cambiato tutte le chiamate da 'd3.json' a' $ .ajax'. Ora mi imbatto in un altro problema, come determinare se il browser è IE o se il browser è IE10-11? Dal momento che hanno rimosso i commenti condizionali "IF IE" da quelle versioni. Sto ancora cercando una risposta sul web, ma non ne trova una corretta – Alchnemesis

risposta

0

Ho avuto lo stesso problema. L'ho risolto aggiungendo questo codice all'HEAD del documento html.

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

Tuttavia, questo impedirà la memorizzazione nella cache di ogni oggetto in una certa pagina, quindi fate attenzione con immagini, font e altri.

+0

Vogliono solo invalidare la cache per la richiesta AJAX, non la cache per l'intera pagina. Dovresti farlo solo se NON vuoi che la tua pagina venga memorizzata nella cache AT ALL, il che non è l'ideale per i siti in cui hai visite di ritorno. Cache è tuo amico! – aboutaaron

Problemi correlati