web-dev-qa-db-fra.com

Étrange AJAX bug avec IE 11

Je travaille actuellement sur une application Web purement HTML et JavaScript qui utilise CORS pour consommer un service Web distant, mais qui rencontre actuellement des problèmes avec IE 11 faisant une demande GET. Ce qui est drôle, c'est que nous '' Je l'ai bien fonctionné dans IE8/9/10, mais pas 11.

Le problème est que IE 11 semble expirer et ne pas attendre une réponse du serveur. L'appel ajax est simplement:

$.ajax(url, {
    dataType: 'json',
    complete: complete,
    type: 'GET',
    global: true,
    success: success,
    crossDomain: true,
    xhrFields: {
        withCredentials: true
    }
});

Dans l'onglet réseau et en utilisant Fiddler, je peux voir IE n'envoie même jamais la demande.

Quelqu'un at-il des idées s'il vous plaît?

EDIT : J'ai oublié de mentionner que j'ai déjà essayé le cache: false. J'ai également trouvé quelque chose de très étrange en ce sens que si je change le mode document dans les outils de développement d'Edge à 9, puis à nouveau l'appel fonctionne à chaque fois, même après avoir effacé IE et redémarré, si le cache est vrai ou faux. Très bizarre.: \

24
Daveo

IE est célèbre pour la mise en cache. Assurez-vous que vous n'obtenez pas de réponse en cache. Vous pouvez définir la valeur de la propriété cache sur false ou ajouter un horodatage unique à l'URL afin qu'il ne s'agisse pas d'une réponse mise en cache. Vous pouvez utiliser la méthode $.now() pour obtenir un horodatage unique.

Définition de la propriété du cache

$.ajax(url, {
    dataType: 'json',
    cache : false,
    //Other things ...
}

Ajout d'un horodatage unique à l'URL

var url="somePage.php?"+$.now();
//Use this url now for making the ajax call

La méthode $.now() est un raccourci pour le nombre renvoyé par l'expression (new Date).getTime()

33
Shyju

je ne suis pas sûr, c'est peut-être la mise en cache, essayez de définir la propriété "cache: false"

sinon, vous pouvez également essayer d'ajouter un datetime à la fin de votre url, donc vous avez à chaque fois une URL différente et IE ne mettra pas en cache

url +""+ (new Date()).getTime()
5
Black Ops

Utilise ceci dans votre balise head

<meta http-equiv="X-UA-Compatible" content="IE=9,chrome=1">
4
SarwarCSE

Je sais que ce fil est ancien, mais comme vérification supplémentaire pour ceux qui rencontrent ce problème, vérifiez que vos paramètres de zone de sites de confiance autorisent l'accès à travers les domaines. Le premier paramètre sous "Divers" est le paramètre souhaité.

Réglez "Accéder aux sources de données sur plusieurs domaines" sur "Activer".

2
Peter C

Si vous exécutez local, essayez de basculer crossDomain sur false. J'ai passé pas mal de temps sur ça. Chrome a géré le crossDomain, mais dans IE si vous n'utilisez pas crossDomain et que vous l'avez défini sur true, il échouera silencieusement).

2
DeadlyChambers