Доступ запрещен к сценарию jQuery в IE
У меня есть iframe, используя скрипт jQuery 1.4.2. Один и тот же фрейм вводится в оба http
а также https
места. Скрипт jQuery включен в основной файл HTML как относительный путь (например, /scripts/jquery-1.4.2.min.js).
Когда выполняется вызов AJAX, Internet Explorer запрещает доступ. AJAX вызывает другой поддомен, но использует правильный протокол. Все остальные браузеры работают, но Internet Explorer выдает следующую ошибку:
СЦЕНАРИЙ5: доступ запрещен.
jquery-1.4.2.min.js, строка 127, символ 344
Я слышал, что эта ошибка от междоменных вызовов AJAX. Но почему IE единственный, кто дает мне дерьмо? Есть ли решение IE?
Также это мой AJAX:
$.ajax({
url: thisURL,
dataType: "json",
data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()},
success: function(ret){
callback(ret)
}
});
10 ответов
IE требует, чтобы вы использовали XDomainRequest вместо XHR для кросс-сайта, вы можете попробовать что-то вроде...
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)
}
});
}
Ссылка
http://forum.jquery.com/topic/cross-domain-ajax-and-ie
не уверен, подходит ли он вашему сценарию
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]);
Вы можете найти больше рекомендаций здесь
Это решило проблему изящно для меня:
https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest
Просто установите / скомпилируйте после jQuery и перед вашим скриптом и используйте метод $.ajax, как обычно, остальное обрабатывается автоматически.
Вы пытались использовать последнюю версию JQuery(> jquery-1.8.0)? Начиная с версии 1.8.0, они решили некоторые ошибки IE9. Возможно, это тоже.
Проверьте домен, к которому вы обращаетесь, должны быть следующие заголовки ответа
"Access-Control-Allow-Methods" : "POST, GET, OPTIONS"
"Access-Control-Allow-Origin" : "http://www.mydomain.com" or "*"
другой домен должен разрешить ваш запрос сценария. Еще один заголовок, который нужно добавить к вашему ответу, - это заголовок P3P.
"p3p" : "CP=IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"
это должно помочь вам.
Я столкнулся с подобной проблемой. Я использовал элемент управления загрузкой файлов, но он был скрыт, и у меня был другой элемент, который пытался контролировать загрузку файлов и события для загрузки файла в формате AJAX.
попробуйте использовать элемент управления загрузкой файлов напрямую. это решенная проблема в моем приложении.
Я получаю эту ошибку (и, следовательно, Google здесь), но причина была совсем другой. Так что, если у вас нет межсайтового сайта и по-прежнему появляется ошибка "Отказано в доступе": дважды проверьте отправленное значение
допустим, вы воздействуете на одну из переменных с помощью некорректного выражения:
urlVar = $("theID").val // without () this was the error!
[...] вызов ajax:
data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()},
Google / FF не имеют проблем с этим (проверьте, что является получающей стороной сервера...), но IE отказывается отправлять это!
У меня была похожая проблема, и решение для меня было использовать jsonp вместо json. Таким образом, мне не нужно было выкладывать версию клиента для IE.
Это можно сделать только в том случае, если хост сервера json поддерживает переменную запроса обратного вызова или у вас есть доступ к серверу и вы можете добавить поддержку. Вот страница, которая помогла мне понять процесс. Его.net mvc сфокусирован, но дает хороший обзор различий между json и jsonp.
http://blogorama.nerdworks.in/entry-EnablingJSONPcallsonASPNETMVC.aspx
Я изменил свой JQuery с версии 1.10.1 на 1.10.2, и это, похоже, решило эту проблему для меня.
Просто добавьте 'callback=?' на ваш запрос URL ajax, как здесь: http://wsvdmeer.blogspot.com.es/2012/08/bugfix-getjson-not-working-in-ie.html
Кажется, что MS находит свой собственный способ действий, а не принимает отраслевые рекомендации. Я нашел решение здесь:
https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest/blob/master/jQuery.XDomainRequest.js