在没有jquery或任何帮助程序库的服务器托管插件上跨域ajax

时间:2012-02-16 02:42:17

标签: ajax xmlhttprequest cross-domain

我制作了一个JavaScript插件,我可以在http://my_server/index.html

的网页上使用
<div id="foo"></div>
<script type="text/javascript" src="http://my_server/myPlugin.js"></script>
<script type="text/javascript">
myPlugin.init();
</script>

myPlugin.jshttp://my_server/query?foo=bar进行ajax调用,并在上面的页面中添加更多元素,就像魅力一样。

现在,我想让其他人使用这个插件。想象一下,用户希望在http://her_server/index.html的网页上实现它,除非现在出现错误

XMLHttpRequest cannot load http://my_server/query?foo=bar. 
Origin http://her_server/index.html is not allowed by 
Access-Control-Allow-Origin.

额外的皱纹。现在我有一个托管在http://my_server/myPlugin.js上的插件(是的,我希望这是一个服务器端插件),查询服务器是相同的http://my_server/query?foo=bar。但是,将来它们可能是不同的服务器。例如,http://my_plugin_server/myPlugin.js处的插件和http://my_query_server/query?foo=bar处的查询服务器。

最后,所有这些都是在没有jQuery或任何其他库的帮助下完成的。我的ajax代码是

"getData": function (q) {
    var uri = "http://my_server/query?foo=" + q;

    var req = new XMLHttpRequest();
    req.onreadystatechange = handler;
    req.open("GET", uri, true);
    req.send();


    function handler(evt) {
        if (req.readyState == 4 && req.status == 200) {
            var json = eval('('+ req.responseText +')');
            .. do something with json ..
        }
    }
}

0 个答案:

没有答案