我运行一个服务,其中有一个在用户站点上调用并自行执行的 javascript 文件。
然后每隔 10 秒左右使用一堆变量调用一个外部服务器。我曾经使用 createElement('script') 来执行此操作,然后设置外部服务器上文件的路径并通过 GET 变量传递所需的变量。(适用于小型 URI)
这非常有效,并且似乎也可以跨浏览器工作,没有不良影响。
然后我遇到的问题是当我需要扩展正在发送的变量的amount
or时。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 来完成这个任务!