我运行的服务中有一个javascript文件,在用户的网站上调用并自行执行。
然后每隔10秒左右用一堆变量调用外部服务器。 我曾经这样做过,使用createElement('script'),然后在外部服务器上设置文件的路径,并通过GET变量传递所需的变量。 (适用于小URI)
这非常有效,似乎也可以跨浏览器工作,没有任何不良影响。
我遇到的问题是当我需要扩展正在发送的变量的amount
或size
时。所以显然我决定从GET方法改为POST,但是通过这样做我不能再使用createElement('script')技巧而不得不选择XMLHttpRequest()(ala Ajax - 没有jQuery)方法,这种方法效果很好,除了小问题,还必须迎合互联网资源管理器和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);
}
..我在this page找到了
这基本上只是使用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执行此任务!
答案 0 :(得分:0)
IE很遗憾阻止Cross Origin请求,我相信没有简单的方法可以通过脚本来绕过它,但你可以尝试调整选项或通过我的代理脚本
Internet Explorer忽略Access-Control-Allow标头,默认情况下禁止Internet区域的跨域访问。要启用CORS,请转到工具 - > Internet选项 - >安全选项卡,单击“自定义级别”按钮。找到杂项 - >跨域访问数据源设置并选择“启用”选项。
上一篇文章: Remote POST request with jQuery and Ajax
这是为了让您在本地服务器上放置PHP脚本,并为远程服务器执行本地AJAX请求和代理。
答案 1 :(得分:0)
你应该尝试jQuery来完成这项任务。它更容易,并没有IE的问题。