Accès refusé au script jQuery sur IE

J'ai un iframe en utilisant le script jQuery 1.4.2. Le même iframe est injecté dans les sites http et https . Le script jQuery est inclus dans le fichier HTML principal en tant que chemin relatif (p. Ex., /scripts/jquery-1.4.2.min.js).

Lorsqu'un appel AJAX est effectué, Internet Explorer refuse l'accès. L'AJAX appelle un autre sous-domaine, mais il utilise le bon protocole. Tous les autres navigateurs fonctionnent mais Internet Explorer donne l'erreur suivante:

SCRIPT5: l'accès est refusé.
Jquery-1.4.2.min.js, ligne 127 caractère 344

J'ai entendu dire que cette erreur provient des appels AJAX multi-domaines. Mais pourquoi IE est-il le seul à me donner de la merde? Existe-t-il une solution IE?

En outre, c'est mon AJAX:

  $.ajax({ url: thisURL, dataType: "json", data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()}, success: function(ret){ callback(ret) } }); 

IE vous oblige à utiliser XDomainRequest au lieu de XHR pour un site croisé, vous pouvez essayer quelque chose comme …

 if ($.browser.msie && window.XDomainRequest) { // Use Microsoft XDR var xdr = new XDomainRequest(); xdr.open("get", url); xdr.onload = function() { // XDomainRequest doesn't provide responseXml, so if you need it: var dom = new ActiveXObject("Microsoft.XMLDOM"); dom.async = false; dom.loadXML(xdr.responseText); }; xdr.send(); } else { // your ajax request here $$.ajax({ url: thisURL, dataType: "json", data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()}, success: function(ret){ callback(ret) } }); } 

Référence

http://forum.jquery.com/topic/cross-domain-ajax-and-ie

Je ne sais pas si cela correspond à votre scénario

 xdr = new XDomainRequest(); xdr.onload=function() { alert(xdr.responseText); } xdr.open("GET", thisUrl); //thisURl ->your cross domain request URL //pass your data here xdr.send([data]); 

Vous pouvez trouver d'autres conseils ici

Cela a résolu le problème gracieusement pour moi:

https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest

Il suffit d'installer / compiler après jQuery et avant votre script et utiliser la méthode $ .ajax comme vous le feriez normalement, le reste sera manipulé automatiquement.

Avez-vous essayer d'utiliser le dernier JQuery (> jquery-1.8.0)? Depuis la version 1.8.0, ils ont résolu les bugs de IE9. C'est peut-être celui-là aussi.

http://blog.jquery.com/2012/08/30/jquery-1-8-1-released/

J'avais un problème similaire et la solution pour moi était d'utiliser jsonp au lieu de json. De cette façon, je n'ai pas eu à sortir une version client pour IE.

Vous ne pouvez le faire que si l'hôte du serveur json prend en charge la variable de demande de rappel ou vous avez accès au serveur et pouvez ajouter un support. Voici une page qui m'a aidé à comprendre le processus. Son .net mvc concentré, mais il donne une bonne vue de la différence entre json et jsonp.

http://blogorama.nerdworks.in/entry-EnablingJSONPcallsonASPNETMVC.aspx

Vérifiez le domaine auquel vous accédez, après la réponse, les en-têtes devraient être là

 "Access-Control-Allow-Methods" : "POST, GET, OPTIONS" "Access-Control-Allow-Origin" : "http://www.mydomain.com" or "*" 

L'autre domaine devrait permettre votre demande de script. Un autre en-tête à ajouter à votre réponse est l'en-tête P3P.

 "p3p" : "CP=IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT" 

Cela devrait vous aider.

J'ai changé mon JQuery de la version 1.10.1 à 1.10.2 et il semble avoir résolu ce problème pour moi.

J'étais confronté à un problème similaire. J'utilisais le contrôle de téléchargement de fichiers, mais il était caché et j'avais un autre élément essayant de contrôler le téléchargement de fichiers et les événements pour télécharger le fichier de manière ajax

Essayez d'utiliser le contrôle de téléchargement de fichier directement. Ce problème résolu dans ma demande.

Il semble que les États-Unis trouvent leur propre façon de faire, plutôt que d'adopter des recommandations de l'industrie. J'ai trouvé la solution ici:
https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest/blob/master/jQuery.XDomainRequest.js

Je reçois ce bug (et donc Google ici) mais la raison était très différente. Donc, si vous n'avez pas de site croisé et obtenez toujours cette erreur refusée d'accès: vérifiez la valeur envoyée
Disons que vous affectez l'une de vos variables avec la mauvaise expression suivante:

 urlVar = $("theID").val // without () this was the error! 

[…] ajax call:

 data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()}, 

Google / FF n'a aucun problème avec ceci (vérifiez ce qui reçoit le côté du serveur …) MAIS IE refuse d'envoyer cela!

Il suffit d'ajouter 'callback =?' Sur votre demande d'URL ajax comme ici: http://wsvdmeer.blogspot.com.es/2012/08/bugfix-getjson-not-working-in-ie.html