1

我有以下应该调用不同域上的页面的 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 安全设置更改为“允许跨不同域”,但我不想告诉我的用户这样做。

4

1 回答 1

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执行您的跨域请求。

数据类型:'jsonp'

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

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

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

于 2012-02-21T22:10:09.617 回答