междоменный ajax на плагине, размещенном на сервере без jquery или какой-либо вспомогательной библиотеки - PullRequest
2 голосов
/ 16 февраля 2012

Я сделал небольшой плагин 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.js, выполнял ajax-вызовы http://my_server/query?foo=bar и добавлял больше элементоввыше страницы и работает как шарм.

Теперь я хочу сделать этот плагин доступным для других.Представьте, что пользователь хочет реализовать его на веб-странице в 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 ..
        }
    }
}
...