这就是我得到的:
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函数?
答案 0 :(得分:1)
使用XMLHttpRequest
的呼叫受Same Origin Policy的约束,这会阻止跨域呼叫,除非服务器和浏览器都支持Cross-Origin Resource Sharing(most browsers do,尽管IE8和IE9支持已损坏,需要使用特定于MS的XDomainRequest
对象),服务器授予对文档来源的访问权限。
缺少CORS,没有直接同步解决方案。你必须间接通过自己的服务器。
如果Twitter Feed支持JSONP,您可以使用它,这是异步的。在任何情况下,异步请求通常都是最好的。
总结以上,答案
是否可以编写一个可以从任何位置获取json的纯JS同步ajax函数?
...是“是的,如果服务器支持CORS并允许来自您的来源的请求,并且您正在使用支持CORS的浏览器;否则,您必须通过您自己的服务器或执行异步请求。 “
答案 1 :(得分:0)
在这种情况下,您必须使用jsonp ... CrossDomain通信...
我为你制作了纯粹的javascript功能......你可以看看并可以自由使用它