对远程站点的纯JS同步AJAX调用

Pure JS synchronous AJAX call to a remote site

本文关键字:JS 同步 AJAX 调用 程站点 站点      更新时间:2023-09-26

这就是我得到的:

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

使用XMLHttpRequest的调用受同源策略约束,该策略禁止跨源调用,除非服务器和浏览器都支持跨源资源共享(尽管IE8和IE9的支持已中断,需要使用特定于MS的XDomainRequest对象),并且服务器授予对文档源的访问权限。

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

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

综上所述,的答案

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

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

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

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

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