通过javascript远程调用

时间:2013-09-15 00:16:13

标签: javascript php ajax cross-browser cross-domain

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

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

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

我遇到的问题是当我需要扩展正在发送的变量的amountsize时。所以显然我决定从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执行此任务!

2 个答案:

答案 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的问题。

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