Jquery $.ajax échoue dans IE sur la croix domaine des appels
Je suis en train de faire une croix demande de domaine à l'aide de $.ajax
. Il fonctionne sur Firefox et Chrome, mais il n'est pas question d'un appel sur IE 7 ou 8. Quelqu'un peut me dire quel est le problème avec le suivant?
- J'ai utilisé JSON et JSONP (que j'ai arrêté de l'utiliser, en raison de quelques restrictions).
- Je suis déjà à l'aide de
Allow-access-control-origin
en-tête sur mon site. (Sans ceux, Chrome et Firefox n'ont pas à faire de la réussite des demandes.) - J'ai déjà essayé https://developer.mozilla.org/en/http_access_control
Code:
$.ajax({
type: 'GET',
url: "http://anotherdomain.com/Service/GetControl?id=" + zoneID,
cache: false,
contentType: "application/x-www-form-urlencoded",
async: false,
beforeSend: function (request) {
//alert('before send');
//request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
//request.setRequestHeader("X-PINGOTHER", "pingpong");
} ,
success: function (data, status) {
//alert("Data returned :" + data);
//alert("Status :" + status);
if (status == "success" && data != "")
$("#" + div.id).append(data);
else
$("#" + div.id).attr("style", "display:none;");
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus);
alert(errorThrown);
}
});
J'ai essayé divers trucs présents sur plusieurs sites, mais pas de chance encore.
Vous devez vous connecter pour publier un commentaire.
Pourriez-vous vérifier si le problème avec IE s'appuie sur de ne pas définir des zones de sécurité pour permettre à la croix de domaine de demandes? Voir cette page de microsoft pour une explication.
Otoh, que, cette page mentionne que IE7 et plus tôt ne peut pas faire croix domaine des appels, mais IE8 peut, à l'aide d'un objet différent de XMLHttpRequest, l'un JQuery utilise. Pourriez-vous vérifier si XDomainRequest fonctionne?
MODIFIER (2013-08-22)
Le deuxième lien est mort, alors j'écris ici certains de ses renseignements, prises à partir de la wayback machine:
Pour IE8 & IE9, vous devez utiliser XDomainRequest (XDR). Si vous regardez en bas, vous verrez qu'il est dans une sorte de mise en forme similaire comme $.ajax. En ce qui concerne ma recherche m'a fait je ne peux pas obtenir ce cross-domaine de travail dans IE6 & 7 (toujours à la recherche d'un travail autour de ce point). XDR sortis pour la première fois dans IE8 (c'est dans IE9 aussi). Donc, fondamentalement, tout d'abord, je test pour 6/7 et de ne pas faire de l'AJAX.
IE10+ est capable de faire du ski-domaine normalement comme tous les autres navigateurs (félicitations Microsoft... soupir)
Après que l'autre si les tests pour " XDomainRequest dans la fenêtre (apparemment mieux que browser sniffing) et le JSON requête AJAX de cette façon, l'autre sage le monde le fait normalement avec $.ajax.
Espérons que cette aide!! M'a pris une éternité pour obtenir ce tout compris à l'origine
Informations sur le XDomainRequest objet
xdr.open('POST', url);
Jquery fait cela pour vous, la seule chose c'est de définir
$.support.cors = true;
Puis traverser demande de domaine fonctionne correctement dans tous les navigateurs pour les utilisateurs de jquery.Il suffit d'installer ce Plugin jQuery: jQuery inter-Domaine AJAX pour IE8
Ce 1.4 kb plugin fonctionne tout de suite dans Internet Explorer 8 et 9.
Inclure le plugin après jQuery, et appelez votre requête ajax comme d'habitude. Rien d'autre n'est requis.
Ajouter des supplémentaires de transport de jquery pour IE.
( Il suffit d'ajouter ce code dans votre script à la fin )
Cela a résolu mon problème avec Jquery $.ajax à défaut de la Croix de Domaine requête AJAX.
Acclamations.
D'autres à venir ici pourrait bien faire pour lire http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx qui parle de limitations de XDomainRequest
Pour toute personne qui pourrait encore avoir ce problème à l'aide de jQuery 2.0 (je sais ce que je fais), Jay Dave a écrit le best jQuery solution de contournement, mais j'ai encore quelques choses à ajouter à son code, à savoir:
Le code complet est ci-dessous:
Simplement ajouter "?rappel=?" (ou "&callback=?") votre url:
Quand on fait des appels (avec tout le reste défini correctement pour inter-domaine, comme ci-dessus) ce qui va déclencher la bonne JSONP mise en forme.
Explication plus approfondie peut être trouvée dans la réponse ici.
@Furqân Pourriez-vous s'il vous plaît laissez-moi savoir si vous avez testé cette avec la méthode HTTP POST,
Depuis que je travaille aussi sur le même genre de situation, mais je ne suis pas en mesure d'afficher les données de domaine différentes.
Mais après la lecture de cette c'était assez simple...la seule chose c'est que vous devez oublier les ANCIENS navigateurs. Je donne le code pour envoyer avec la méthode POST de même URL ci-dessus pour la référence rapide
Note, ajoutant
était suffisante pour forcer $.les appels ajax pour travailler sur IE8
Microsoft toujours charrues auto-destructeur (au moins dans IE) sillon:
http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/
De la SCRO fonctionne avec XDomainRequest dans IE8. Mais IE 8 ne prend pas en charge Contrôlé ou Accrédité Demandes alors que Firefox 3.5+, Safari 4+, Chrome et tout le soutien à de telles demandes.
J'ai le même problème sous IE, je l'ai résolu en remplaçant:
À
Donc, fondamentalement, la mise à niveau de votre version jquery.
J'ai eu un problème similaire dans IE9 où certains de la SCRO des appels à l'abandon, tandis que d'autres ne l'étaient pas. Mon application est également dépendante sur une promesse d'interface, de sorte que le XDomainRequest suggestions ci-dessus n'étaient pas EXACTEMENT ce dont j'avais besoin, j'ai donc ajouté un différé dans mon service.obtenir la solution de contournement pour IE9. Nous espérons qu'elle puisse être utile à quelqu'un d'autre cours d'exécution sur ce problème. :
C'est difficile à dire à cause du manque de mise en forme dans la question, mais je pense que j'en vois deux problèmes avec l'appel ajax.
1) l'application/x-www-form-urlencoded pour contentType doit être entre guillemets
2) Il devrait y avoir une virgule séparant le contentType et async paramètres.