J'ai un iframe 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 (par exemple, /scripts/jquery-1.4.2.min.js).
Lorsqu'un appel AJAX est effectué, Internet Explorer refuse l'accès. Le AJAX appelle un autre sous-domaine, mais 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 que cette erreur provenait de plusieurs domaines AJAX appels. Mais pourquoi est IE le seul qui me donne de la merde? Y a-t-il un IE solution?
C'est aussi 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 le cross-site, 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 plus de conseils ici
Cela a résolu le problème avec élégance pour moi:
https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest
Installez/compilez juste après jQuery et avant votre script et utilisez la méthode $ .ajax comme vous le feriez normalement, le reste est géré automatiquement.
Avez-vous essayé d'utiliser le dernier de JQuery (> jquery-1.8.0)? Depuis la version 1.8.0, ils ont résolu certains bugs d'IE9. Peut-être celui-ci aussi.
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'ai eu 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 si vous avez accès au serveur et pouvez ajouter la prise en charge. Voici une page qui m'a aidé à comprendre le processus. Son .net mvc concentré, mais il donne une bonne vue d'ensemble de la différence entre json et jsonp.
http://blogorama.nerdworks.in/entry-EnablingJSONPcallsonASPNETMVC.aspx
Vérifiez le domaine auquel vous accédez, les en-têtes de réponse suivants devraient être là
"Access-Control-Allow-Methods" : "POST, GET, OPTIONS"
"Access-Control-Allow-Origin" : "http://www.mydomain.com" or "*"
l'autre domaine doit autoriser votre requête de script. Un en-tête de plus à 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'étais confronté à un problème similaire. J'utilisais le contrôle de téléchargement de fichier mais il était caché et j'avais un autre élément essayant de contrôler le téléchargement de fichier et les événements pour télécharger le fichier de manière ajax
essayez d'utiliser directement le contrôle de téléchargement de fichiers. ce problème résolu dans ma demande.
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 d'accès refusé: revérifiez valeur envoyé
disons que vous affectez l'une de vos variables avec la mauvaise expression suivante:
urlVar = $("theID").val // without () this was the error!
[...] appel ajax:
data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()},
Google/FF n'ont aucun problème avec cela (vérifiez ce qui est reçu côté serveur ...) MAIS IE refusez d'envoyer cela!
Ajoutez simplement 'callback =?' sur votre demande d'URL ajax comme ici: http://wsvdmeer.blogspot.com.es/2012/08/bugfix-getjson-not-working-in-ie.html
Il semble que les États membres trouvent leur propre façon de faire les choses, 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