纯JS同步AJAX调用远程站点

时间:2013-07-07 12:08:29

标签: javascript ajax json cors

这就是我得到的:

function fetchJson(url, method, params) {
    var request,
        method = method || 'GET',
        params = params || null;

    if (window.XMLHttpRequest) {
        request = new window.XMLHttpRequest();
    } else {
        try {
            request = new ActiveXObject("MSXML2.XMLHTTP");
        } catch (ex) {
            return null;
        }
    }

    request.open(method, url, false);
    request.send(params);

    if (request.readyState === 4 && request.status === 200)
        return JSON.parse(request.responseText);

    return null;
}

这应该是同步获取json

然而,当我在Opera 12中运行这个以获取Twitter搜索Json时,我得到一个未处理的NETWORK_ERR抛出。

是否可以编写一个可以从任何位置获取json的纯JS同步ajax函数?

2 个答案:

答案 0 :(得分:1)

使用XMLHttpRequest的呼叫受Same Origin Policy的约束,这会阻止跨域呼叫,除非服务器和浏览器都支持Cross-Origin Resource Sharingmost browsers do,尽管IE8和IE9支持已损坏,需要使用特定于MS的XDomainRequest对象),服务器授予对文档来源的访问权限。

缺少CORS,没有直接同步解决方案。你必须间接通过自己的服务器。

如果Twitter Feed支持JSONP,您可以使用它,这是异步的。在任何情况下,异步请求通常都是最好的。

总结以上,答案

  

是否可以编写一个可以从任何位置获取json的纯JS同步ajax函数?

...是“是的,如果服务器支持CORS并允许来自您的来源的请求,并且您正在使用支持CORS的浏览器;否则,您必须通过您自己的服务器或执行异步请求。 “

答案 1 :(得分:0)

在这种情况下,您必须使用jsonp ... CrossDomain通信...

我为你制作了纯粹的javascript功能......你可以看看并可以自由使用它

https://github.com/toosha01/ajax-javascript