web-dev-qa-db-fra.com

jQuery AJAX demande échouant dans IE

L'appel suivant 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 renvoie

Undefined
parsererror
OK

Aucune demande n'est faite au serveur, donc je ne pense pas que ce soit un problème avec le JSON.

Fixe, voir # 1351389

38
Sam

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

Aussi pour éviter IE super-cache 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

51
Sam

Pour le problème de mise en cache, pourquoi ne pas simplement utiliser le cache: false paramètre?

$.ajax({ 
    url: "yoururl",
    cache: false,
    ....
48
tanathos

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

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

mais IE s'étouffe parce que la virgule après le dernier élément. changez-la en:

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

et il fonctionne.

8
Javier

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
});
6
Jav_Rock

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

3
Craig Stuntz

Un problème majeur avec JSON généré statiquement et IE sont les "virgules", par exemple, cela génère une erreur dans IE:

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

Notez la dernière virgule.

2
Luca Matteis

À quoi sert le morceau {{SITE_URL}}. Essayez de regarder le code dans le code source de vue du navigateur. Si le morceau {{SITE _URL}} a une barre oblique de fin et cela ferait l'url de la requête:

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

Ce qui pourrait se glisser IE out?

0
Pim Jager

IE: erreur JSON non définie résolue à

http://funkatron.com/site/comments/safely-parsing-json-in-javascript/

en utilisant dataType: "json" et éviter l'analyse

0
user333483