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



我有以下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);
        } 

oneror方法中的代码部分被执行,但xdr.responseText不为空。有人能指出我可能做错了什么吗?

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

我相信您遇到了同源策略,在该策略中,您不允许向与当前域不同的域创建AJAX请求。这是有办法解决的;您可以创建一个服务器端脚本用作代理,或者如果可能的话使用JSONP(需要正确设置远程服务器才能使JSONP工作。

既然你用jQuery标记了你的问题,我将给你一个如何在jQuery框架内做到这一点的例子(这是使用jQuery的主要原因之一,它使AJAX变得简单):

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

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

数据类型:'jsonp'

使用JSONP在JSON块中加载。在以指定回调。通过附加禁用缓存查询字符串参数"_=[TIMESTAMP]",指向URL,除非缓存选项设置为true。$.ajax():的文档

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

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

相关内容

  • 没有找到相关文章

最新更新