Доступ запрещен к сценарию 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. Возможно, это тоже.

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

Проверьте домен, к которому вы обращаетесь, должны быть следующие заголовки ответа

"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

Другие вопросы по тегам