首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Jquery $.ajax在IE的跨域调用中失败

Jquery $.ajax在IE的跨域调用中失败
EN

Stack Overflow用户
提问于 2010-07-29 20:35:18
回答 14查看 104K关注 0票数 64

我正在使用$.ajax进行跨域请求。它可以在Firefox和Chrome上运行,但在IE 7或8上不能发出调用。有人能告诉我以下问题出在哪里吗?

由于一些自定义的restrictions).

  • I已经在我的网站上使用
  1. ,我已经不再使用JSON和JSONP了。(没有这些,Chrome和火狐的请求就不会成功。)
  2. 我已经尝试过https://developer.mozilla.org/en/http_access_control

代码:

$.ajax({
    type: 'GET',
    url: "http://anotherdomain.com/Service/GetControl?id=" + zoneID,
    cache: false,
    contentType: "application/x-www-form-urlencoded",
    async: false,
    beforeSend: function (request) {
        //alert('before send');
        //request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
        //request.setRequestHeader("X-PINGOTHER", "pingpong");
    } ,
    success: function (data, status) {
        //alert("Data returned :" + data);
        //alert("Status :" + status);
        if (status == "success" && data != "")
            $("#" + div.id).append(data);
        else
            $("#" + div.id).attr("style", "display:none;");
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        alert(textStatus);
        alert(errorThrown);
    }
});

我已经在多个网站上尝试了各种技巧,但还没有成功。

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2010-08-01 15:14:50

你能检查IE的问题是否依赖于没有定义安全区域来允许跨域请求吗?See this microsoft page解释。

this page提到,IE7和早期版本不能进行跨域调用,但IE8可以使用与XMLHttpRequest不同的对象,即JQuery使用的对象。你能检查一下XDomainRequest是否正常工作吗?

编辑(2013-08-22)

第二个链接是死的,所以我在这里写一些它的信息,取自wayback machine

支持的

XDomainRequest : IE8

IE团队没有实现CORS版本的XMLHttpRequest,而是使用了自己的专有对象,名为XDomainRequest。通过抛出更多的事件( onload可能是最重要的),XMLHttpRequest简化了XDomainRequest的使用。

这个实现有一些附加的限制。例如,使用此对象时不会发送cookie,这对于服务器端基于cookie的会话来说可能是一个令人头疼的问题。此外,不能设置ContentType,这在ASP.NET和其他服务器端语言(请参阅http://www.actionmonitor.co.uk/NewsItem.aspx?id=5)中造成了问题。

var xdr =新函数();xdr.onload =函数(){XDomainRequest(“READY”);};xdr.open("GET","script.html");xdr.send();

票数 32
EN

Stack Overflow用户

发布于 2012-06-30 03:37:32

对于IE8和IE9,您需要使用XDomainRequest (XDR)。如果你看下面,你会发现它的格式类似于$.ajax。就我的研究而言,我不能在IE6 &7中实现这种跨域工作(仍然在寻找解决这个问题的方法)。XDR最早是在IE8中出现的(它也是在IE9中)。因此,基本上首先,我测试6/7,并且不执行AJAX。

IE10+能够像所有其他浏览器一样进行跨域操作(恭喜微软...叹息)

在那之后,else if在窗口中测试'XDomainRequest (显然比浏览器嗅探更好),并以这种方式执行JSON AJAX请求,否则ELSE将正常使用$.ajax。

希望这能有所帮助!!我花了很长时间才弄明白这一切

Information on the XDomainRequest object

// call with your url (with parameters) 
// 2nd param is your callback function (which will be passed the json DATA back)

crossDomainAjax('http://www.somecrossdomaincall.com/?blah=123', function (data) {
    // success logic
});

function crossDomainAjax (url, successCallback) {

    // IE8 & 9 only Cross domain JSON GET request
    if ('XDomainRequest' in window && window.XDomainRequest !== null) {

        var xdr = new XDomainRequest(); // Use Microsoft XDR
        xdr.open('get', url);
        xdr.onload = function () {
            var dom  = new ActiveXObject('Microsoft.XMLDOM'),
                JSON = $.parseJSON(xdr.responseText);

            dom.async = false;

            if (JSON == null || typeof (JSON) == 'undefined') {
                JSON = $.parseJSON(data.firstChild.textContent);
            }

            successCallback(JSON); // internal function
        };

        xdr.onerror = function() {
            _result = false;  
        };

        xdr.send();
    } 

    // IE7 and lower can't do cross domain
    else if (navigator.userAgent.indexOf('MSIE') != -1 &&
             parseInt(navigator.userAgent.match(/MSIE ([\d.]+)/)[1], 10) < 8) {
       return false;
    }    

    // Do normal jQuery AJAX for everything else          
    else {
        $.ajax({
            url: url,
            cache: false,
            dataType: 'json',
            type: 'GET',
            async: false, // must be set to false
            success: function (data, success) {
                successCallback(data);
            }
        });
    }
}
票数 63
EN

Stack Overflow用户

发布于 2012-07-17 15:14:42

Jquery为你做到了这一点,唯一要做的就是设置$.support.cors = true;,然后跨域请求对于jquery用户来说在所有浏览器中都能很好地工作。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3362474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档