0

这就是我得到的:

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 函数?

4

2 回答 2

1

使用的调用XMLHttpRequest受同源策略的约束,除非服务器和浏览器都支持跨域资源共享,否则会阻止跨域调用(大多数浏览器都支持,尽管 IE8 和 IE9 的支持被破坏,需要使用特定于 MS 的XDomainRequest对象)并且服务器授予对文档来源的访问权限。

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

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

综上所述,答案

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

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

于 2013-07-07T12:15:15.220 回答
0

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

我为您制作了纯javascript函数...您可以看看并免费使用它

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

于 2014-06-10T05:43:39.693 回答