跨域ajax的XDomainRequest给出了难以理解的错误 - 空错误

时间:2012-02-21 22:04:34

标签: javascript jquery ajax xdomainrequest xdr

我有以下ajax调用,它应该调用不同域上的页面:

if ($.browser.msie && window.XDomainRequest) {

            // Use Microsoft XDR
            var xdr = new XDomainRequest();
            xdr.open("post", "https://different-domain.aspx");
            xdr.onload = function() {
                alert(xdr.responseText);// XDomainRequest doesn't provide responseXml, so if you need it:                       

            };
            xdr.onerror = function() {
                alert("Error " + xdr.responseText);
            };
            xdr.onprogress = function() {
                alert('errored out');
            };

            var params = "fileName="+ file+"&param02="+ param02+"&param03="+ param03+"&param05="+ param05+"&param08="+ param08+"&param11="+ param11;
            alert(params);
            xdr.send(params);
        } 

执行onerror方法中的代码部分,但xdr.responseText没有 - 空。任何人都能指出我可能做错了什么吗?

我试图在另一个域上调用ajax页面 - 一个快捷方式是将Internet安全设置更改为“允许跨越不同的域”,但我不想告诉我的用户这样做。

1 个答案:

答案 0 :(得分:1)

我相信您正在使用Same-Origin-Policy,不允许您创建与当前域不同的域的AJAX请求。有办法解决这个问题;您可以创建服务器端脚本以用作代理,或者尽可能使用JSONP(正确设置远程服务器以使JSONP正常工作。

由于您使用jQuery标记了您的问题,我将为您提供一个如何在jQuery框架内执行此操作的示例(这是使用jQuery的主要原因之一,它使AJAX变得简单):

$.ajax({
    url      :  <url>,
    type     : 'post',
    dataType : 'jsonp',
    success  : function (serverResponse) {},
    error    : function (jqXHR, textStatus, errorThrown) {}
});

这使用JSONP来执行您的跨域请求。

  

dataType:'jsonp'

     

使用JSONP加载JSON块。添加额外的“?callback =?”到了   您的网址末尾指定回调。通过附加禁用缓存   除非缓存,否则查询字符串参数“_ = [TIMESTAMP]”到URL   选项设置为true。 $.ajax()的文档:

来源:http://api.jquery.com/jquery.ajax

在通过jQuery发出AJAX请求时,您可以设置更多选项,请查看文档以查看所有选项。