Подтвердить что ты не робот

Доступ запрещен jQuery script в IE

У меня есть iframe, используя jQuery 1.4.2 script. Тот же самый iframe вводится на сайты http и https. JQuery script включен в основной HTML файл как относительный путь (например,/scripts/jquery-1.4.2.min.js).

При вызове AJAX Internet Explorer запрещает доступ. AJAX вызывает другой субдомен, но использует правильный протокол. Все остальные браузеры работают, но Internet Explorer дает следующую ошибку:

SCRIPT5: доступ запрещен.
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)
     }
 });
4b9b3361

Ответ 1

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]); 

вы можете найти несколько рекомендаций здесь

Ответ 2

Это решило проблему изящно для меня:

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

Просто установите/скомпилируйте после jQuery и перед script и используйте метод $.ajax, как обычно, остальные будут обрабатываться автоматически.

Ответ 3

Попробуйте использовать последний JQuery ( > jquery-1.8.0)? Начиная с версии 1.8.0, они решили некоторые ошибки IE9. Возможно, этот тоже.

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

Ответ 4

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

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

другой домен должен разрешить ваш запрос script. Еще один заголовок, который будет добавлен в ваш ответ, - заголовок P3P.

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

он должен помочь вам.

Ответ 5

У меня была аналогичная проблема, и решение для меня заключалось в использовании jsonp вместо json. Таким образом, мне не нужно было выпускать версию для IE.

Это можно сделать только в том случае, если хост json-сервера поддерживает переменную запроса обратного вызова или у вас есть доступ к серверу и вы можете добавить поддержку. Вот страница, которая помогла мне понять этот процесс. Его .net mvc сфокусирован, но он дает хорошее представление о различии между json и jsonp.

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

Ответ 6

Я изменил свой JQuery с версии 1.10.1 на 1.10.2 и, похоже, решил эту проблему для меня.

Ответ 7

Я столкнулся с подобной проблемой. Я использовал элемент управления загрузкой файлов, но он был скрыт, и у меня был другой элемент, который пытался контролировать загрузку файла и события для загрузки файла по ajax.

попробуйте напрямую использовать управление загрузкой файлов. эта проблема решена в моем приложении.

Ответ 9

Я получаю эту ошибку (и, следовательно, google здесь), но причина была совсем другая. Поэтому, если у вас нет кросс-сайта и по-прежнему получаю эту ошибку с доступом: дважды проверьте значение скажем, что вы воздействуете на одну из вас с неправильным следующим выражением:

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

[...] ajax call:

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

У Google/FF нет проблем с этим (проверьте, что такое сервер на стороне сервера...) НО IE отказываются отправлять это!