2009-01-08 7 views
37

Następujące wywołanie AJAX nie działa w IE.Żądanie jQuery AJAX zawodzi w 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... 
    } 
}); 

Funkcja błędu zwraca

Undefined 
parsererror 
OK 

Nie żądania do serwera, więc nie sądzę, że jest to problem z JSON.

Stałe, patrz # 1351389

+0

Działa w innych przeglądarkach? –

Odpowiedz

49

Fixed, zmieniłem typ zawartości z application/json; charset=utf8 po prostu zwykły application/json.
Nienawidzę IE :)

także uniknąć super-cache IE spróbuj tego:

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

W ten sposób każda prośba jest nowy adres URL dla IE dostać: D

+26

Boże, cieszę się, że znalazłem tę odpowiedź. mi dni mojego życia, że ​​Microsoft nie chce mnie odzyskać, tylko po to, aby powtórzyć: ja też nienawidzę IE –

+13

Drogi IE, Nienawidzę Cię Drogi @Sam, kocham Cię – Gabe

+6

Nienawidzę też IE ... –

8

czy jest to kopiuj/wklej? jedyną rzeczą, która sprawia, że ​​przez cały czas jestem, jest pozostawienie ostatniego "," w konstruktorze obiektów. to znaczy, większość przeglądarek JS akceptuje:

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

, ale IE dławi się tym, ponieważ przecinek po ostatnim elemencie. zmień go na:

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

i to działa.

+0

Mężczyźni - jesteś dziwakiem :) Uratowałeś mi dużo czasu. Zauważ, że to zepsuje tylko IE7 i poniżej. Od IE8 to nie są błędy wzrostu. – bksi

0

Co to jest podarunek {{SITE_URL}} to około. Spróbuj spojrzeć na kod w widoku kodu źródłowego przeglądarki. Jeśli {{SITE _url}} kawałek ma ukośnik i która stałaby url żądanie:

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

Które mogłyby pełzania IE out?

+0

No cóż, jakakolwiek przeglądarka, którą znam, jest w stanie w tym pomóc ... więc nie jest to konkretny problem z IE. – SamiSalami

3

IE buforuje żądania AJAX bardzo agresywnie (bardziej niż Firefox, w każdym razie). Musisz odpowiednio ustawić nagłówki Cache-Control w odpowiedzi, jeśli nie odpowiada to Twojej witrynie.

+1

Dobra rada, dodałem I_? = 1234 na końcu i teraz żądam strony za każdym razem. Ciągle ten sam problem :( – Sam

2

Jednym z głównych problemów z wygenerowanym statycznie JSON i IE są wiodącymi „przecinki”, przykłady to zgłasza błąd w IE:

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

Uwaga ostatni przecinkami.

48

Aby rozwiązać problem z buforowaniem, dlaczego nie można łatwo użyć parametru cache: false?

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

Zrobię, okrzyki za podpowiedź – Sam

+2

Wydaje mi się dziwne, że domyślnie nie jest to "fałsz" ... – Buchannon

+1

Pozdrawiam, rozwiązałem to dla mnie! Jestem ciekawy co do dlaczego IE faktycznie nie używa wersji, którą zapamiętuje ... –

6

W nowszych wersjach przeglądarki Internet Explorer (IE7) konieczne jest napisanie następnej linii przed wywołaniem $.ajax, inaczej nigdy nie zadzwoniłoby do tej funkcji:

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