2009-01-08 31 views
37

La seguente chiamata AJAX sta fallendo in IE.richiesta jQuery AJAX non riuscendo in IE

$.ajax({ 
    url:"{{SITE_URL}}/content/twitter.json", 
    dataType:"json", 
    error:function(xhr, status, errorThrown) { 
     alert(errorThrown+'\n'+status+'\n'+xhr.statusText); 
    }, 
    success:function(json) { 
       ...Snip... 
    } 
}); 

La funzione di errore ritorna

Undefined 
parsererror 
OK 

Nessuna richiesta è fatta per il server in modo non credo che la sua un problema con il JSON.

fisso, vedere # 1351389

+0

Sta funzionando su altri browser? –

risposta

49

fisso, ho cambiato il tipo di contenuto da application/json; charset=utf8 a semplicemente application/json.
Odio IE :)

Anche per evitare IE super-caching provate questo:

var d = new Date(); 
$.ajax({ 
     url:"{{SITE_URL}}/content/twitter.json?_="+d.getTime(), 
...Snip... 

In questo modo ogni richiesta è un nuovo URL per IE per ottenere: D

+26

Dio, sono contento di aver trovato questa risposta. io giorni della mia vita che Microsoft non mi restituirà.Ma per ribadire: I effing odio anche IE –

+13

Caro IE, ti odio Caro @Sam, ti amo. – Gabe

+6

Odio anche io ... –

8

questo è un copia/incolla? l'unica cosa che mi fa sempre lasciare l'ultimo ',' in un costruttore di oggetti. vale a dire, la maggior parte dei browser accettano JS:

o = { a:1, b:2, c:3, }; 

ma IE induttanze su questo perché la virgola dopo l'ultimo elemento. cambiarlo a:

o = { a:1, b:2, c:3 }; 

e funziona.

+0

Uomini - sei un mostro :) Mi hai salvato un sacco di tempo. Si noti che questa interruzione solo IE7 e sotto. Da IE8 questo non è un aumento degli errori. – bksi

0

Qual è il {{}} SITE_URL pezzo dare è di circa. Prova a guardare il codice nella visualizzazione del codice sorgente del browser. Se il {{SITO _URL}} pezzo ha una barra finale e che avrebbe fatto la richiesta URL:

 
http://modomain.com//content/twitter.json 

Il che potrebbe insinuarsi IE fuori?

+0

Bene, qualsiasi browser che conosco di cui fuggire è così ... quindi non si tratta di un problema specifico di IE. – SamiSalami

3

IE memorizza nella cache richieste AJAX davvero aggressivo (più che Firefox, comunque). Devi impostare le intestazioni di Cache-Control nella risposta in modo appropriato se questo non è giusto per il tuo sito.

+1

Buon punto, ive aggiunto? _ = 1234 alla fine di esso e cioè ora richiedi la pagina ogni volta. Ancora lo stesso problema però :( – Sam

2

Uno dei problemi principali con generato staticamente JSON e IE sono i principali "virgole", per esempio questo genera un errore in IE:

{ 
    "one":"hello", 
    "two":"hi", 
} 

Nota l'ultima virgola.

48

Per il problema di caching perché non uso semplice il parametro cache: false?

$.ajax({ 
    url: "yoururl", 
    cache: false, 
    .... 
+0

Lo farà, evviva il suggerimento – Sam

+2

Mi sembra piuttosto strano che questo non sia impostato su "falso" di default ... – Buchannon

+1

Cheers, risolto per me! Sono curioso di perché IE in realtà non usa la versione che memorizza nella cache ... –

6

Nelle versioni più recenti di Internet Explorer (IE7) è necessario scrivere alla riga successiva prima di chiamare $.ajax, altrimenti non chiamerebbe mai la funzione:

$.ajaxSetup({ cache: false }); //this line before $.ajax!!! 
$.ajax({ 
    //codes 
    //codes 
    //codes 
}); 
Problemi correlati