2009-01-08 7 views
37

L'appel AJAX suivant échoue dans IE.La requête jQuery AJAX échoue dans 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 fonction d'erreur retourne

Undefined 
parsererror 
OK 

Aucune demande est faite au serveur, donc je ne pense pas que son problème avec le JSON.

fixe, Voir # 1351389

+0

Cela fonctionne sur d'autres navigateurs? –

Répondre

49

fixe, j'ai changé le type de contenu de application/json; charset=utf8 à tout simplement application/json.
Je déteste IE :)

également pour éviter super-cache IE essayez ceci:

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

De cette façon, chaque demande est une nouvelle URL pour IE pour obtenir: D

+26

Dieu, je suis content d'avoir trouvé cette réponse. moi jours de ma vie que Microsoft ne me rendra pas.Juste pour réitérer: je fais la haine IE, aussi –

+13

Cher IE, je vous hais Cher @Sam, je t'aime – Gabe

+6

Je déteste IE aussi ... –

8

est-ce un copier/coller? la seule chose qui m'obtient tout le temps est de laisser le dernier ',' dans un constructeur d'objets. qui est, la plupart des navigateurs acceptent JS:

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

mais IE selfs sur ce point car la virgule après le dernier élément. changez le à:

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

et cela fonctionne.

+0

Les hommes - vous êtes un monstre :) Vous m'avez sauvé beaucoup de temps. Notez que cela ne casse que IE7 et ci-dessous. De IE8 ce ne sont pas des erreurs d'augmentation. – bksi

0

À quoi correspond le bloc {{SITE_URL}}? Essayez de regarder le code dans le code source de la vue du navigateur. Si le {{SITE}} _url morceau a une barre oblique et qui amélioreraient l'URL de la requête:

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

Ce qui pourrait se glisser IE dehors?

+0

Eh bien, tous les navigateurs que je connais se faufileraient à ce sujet ... donc ce n'est pas un problème IE spécifique. – SamiSalami

3

IE met en cache les requêtes AJAX de façon très agressive (plus que Firefox, de toute façon). Vous devez définir correctement les en-têtes Cache-Control dans la réponse si cela ne convient pas à votre site.

+1

Bon point, ive ajouté? _ = 1234 à la fin de celui-ci et c'est à dire maintenant demander la page à chaque fois. Encore le même problème si :( – Sam

2

Un problème majeur avec JSON et IE statiquement générés sont les principaux « virgules », pour des exemples de cette renvoie une erreur dans IE:

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

Notez la virgule.

48

Pour le problème de mise en cache pourquoi n'utilisez-vous pas simplement le paramètre cache: false?

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

Will, acclamations pour le pourboire – Sam

+2

Il me semble assez étrange que ce n'est pas réglé sur "faux" par défaut ... – Buchannon

+1

Cheers, a résolu pour moi! Je suis curieux de savoir pourquoi IE n'utilise pas vraiment la version qu'il met en cache ... –

6

Dans les versions plus récentes d'Internet Explorer (IE7), il est nécessaire d'écrire la ligne suivante avant d'appeler $.ajax, sinon il n'appellerait jamais la fonction:

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