我运行一个服务,其中有一个在用户站点上调用和自执行的javascript文件。
然后,每 10 秒左右使用一堆变量调用一次外部服务器。我曾经通过使用createElement('script'),然后设置外部服务器上文件的路径并通过GET变量传递所需的变量来做到这一点。(适用于小型 URI)
这工作得很好,似乎也可以跨浏览器工作,没有不良影响。
然后我遇到的问题是当我需要扩展正在发送的变量的amount
或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来完成这个任务!
你应该尝试jQuery来完成这个任务。它要容易得多,并且IE没有这个问题。
http://api.jquery.com/jQuery.ajax/
IE 阻止了跨源请求,我相信没有简单的方法可以仅通过脚本来解决它,但您可以尝试调整选项或通过我的代理脚本。
调整选项
InternetExplorer 忽略 Access-Control-Allow 标头,默认情况下禁止 Internet 区域的跨源访问。要启用 CORS,请转到工具->互联网选项->安全选项卡,单击"自定义级别"按钮。找到"杂项 ->跨域访问数据源"设置,然后选择"启用"选项。
本地服务器上的代理脚本作为网桥
上一篇文章:使用 jQuery 和 Ajax 的远程 POST 请求
这是为了将PHP脚本放在本地服务器上,并向远程服务器执行本地AJAX请求和代理。