通过 javascript 进行远程调用



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

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

这工作得很好,似乎也可以跨浏览器工作,没有不良影响。

然后我遇到的问题是当我需要扩展正在发送的变量的amountsize时。所以很明显,我决定从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 阻止了跨源请求,我相信没有简单的方法可以仅通过脚本来解决它,但您可以尝试调整选项或通过我的代理脚本。

调整选项

Internet

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

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

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

这是为了将PHP脚本放在本地服务器上,并向远程服务器执行本地AJAX请求和代理。

相关内容

  • 没有找到相关文章