0

我运行一个服务,其中有一个在用户站点上调用并自行执行的 javascript 文件。

然后每隔 10 秒左右使用一堆变量调用一个外部服务器。我曾经使用 createElement('script') 来执行此操作,然后设置外部服务器上文件的路径并通过 GET 变量传递所需的变量。(适用于小型 URI)

这非常有效,并且似乎也可以跨浏览器工作,没有不良影响。

然后我遇到的问题是当我需要扩展正在发送的变量的amountor时。size所以很明显我决定从 GET 方法更改为 POST,但是这样做我不能再使用 createElement('script') 技巧,不得不选择 XMLHttpRequest()(ala Ajax - 没有 jQuery)方法,它工作得非常好,除了必须同时满足 Internet Explorer 和 Opera 的小问题,它们并没有真正发挥得很好(大震惊)。所以我使用了以下内容:

function createCORSRequest(method, url){
    var xhr = new XMLHttpRequest();
    if ("withCredentials" in xhr){
        xhr.open(method, url, true);
    } else if (typeof XDomainRequest != "undefined"){
        xhr = new XDomainRequest();
        xhr.open(method, url);
    } else {
        xhr = null;
    }
    return xhr;
}

var request = createCORSRequest("post", "http://xx.xxxx.com/");
if (request){
    request.onload = function(){
        //do something with request.responseText
    };
    request.send(myPostObjectDataVariableGoeshere);
}

..我在这个页面上找到了

这基本上只是使用 InternetExplorer 希望您使用的 XDomainRequest() 方法的后备。

太棒了,但是->查看 IE 中的开发人员工具控制台,它说:

SEC7118: XMLHttpRequest for http://xx.xxxx.com/ required Cross Origin Resource Sharing (CORS).

SEC7120: Origin null not found in Access-Control-Allow-Origin header. 

SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied.

但真正奇怪的是,我的后端 PHP 文件中的第一行已经被调用(适用于其他浏览器......)

header('Access-Control-Allow-Origin: *');

有人请告诉我这里出了什么问题..另外,如果有更好的方法可以做到这一点而不是与浏览器大战..

注意:我不能使用 jQuery 来完成这个任务!

4

2 回答 2

0

不幸的是,IE 阻止了跨域请求,我相信没有简单的方法可以仅通过脚本绕过它,但您可以尝试调整选项通过我的代理脚本

调整选项

Internet Explorer 忽略 Access-Control-Allow 标头,默认情况下禁止 Internet 区域的跨域访问。要启用 CORS,请转到工具-> Internet 选项-> 安全选项卡,单击“自定义级别”按钮。找到杂项 -> 跨域访问数据源设置并选择“启用”选项。

本地服务器上的代理脚本作为网桥

上一篇: 使用 jQuery 和 Ajax 的远程 POST 请求

这是为了让您将 PHP 脚本放在本地服务器上,并执行本地 AJAX 请求并永久代理到远程服务器。

于 2013-09-15T00:24:15.833 回答
0

您应该尝试使用 jQuery 来完成此任务。它更容易,而且 IE 没有这个问题。

http://api.jquery.com/jQuery.ajax/

于 2013-09-15T00:25:39.133 回答