从不同URL检索JSON对象的Javascript(无JQuery)函数?
我一直在寻找一个AJAX函数,它接收URL,然后返回JSON对象 比如说,我需要在URL1中显示JSON中的一些用户信息,还需要将这些信息与URL2中JSON中的一些帖子信息混合在一起 我希望在没有JQquery的情况下执行此操作 让我们这样说:从不同URL检索JSON对象的Javascript(无JQuery)函数?,javascript,json,ajax,Javascript,Json,Ajax,我一直在寻找一个AJAX函数,它接收URL,然后返回JSON对象 比如说,我需要在URL1中显示JSON中的一些用户信息,还需要将这些信息与URL2中JSON中的一些帖子信息混合在一起 我希望在没有JQquery的情况下执行此操作 让我们这样说: function loadJSON(path, success, error) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.re
function loadJSON(path, success, error)
{
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function()
{
if (xhr.readyState === XMLHttpRequest.DONE) {
if (xhr.status === 200) {
if (success)
success(JSON.parse(xhr.responseText));
} else {
if (error)
error(xhr);
}
}
};
xhr.open("GET", path, true);
xhr.send();
}
function getInfo(){
var users, posts;
loadJSON('http://.com/users',
function(dataU) {
users = dataU;
},
function(xhr) { console.error(xhr); }
);
loadJSON('http://.com/posts',
function(dataP) {
posts = dataP;
},
function(xhr) { console.error(xhr); }
);
console.log(users);
console.log(posts);
}
getInfo();
要在没有jQuery的情况下实现这一点,您可以回到普通的JavaScript
XMLHttpRequest
s。这将允许您与远程主机建立HTTP连接,例如获取数据
要开始这些请求,您可以查看
将帮助您将JSON字符串转换为JavaScript对象
作为
XMLHttpRequest
s的替代方案,您还可以查看。它为HTTP调用提供了更干净的接口。但是,由于它仍然是实验性的,您可能希望使用polyfill。带或不带jQuery
的XMLHttpRequest
objest是异步的。jQuery在内部使用它。FIY AJAX代表AsynchronousJavascriptAndXml。这意味着您无法从异步函数接收同步结果。但是您可以并且应该在发送给请求的回调函数中使用结果。因此,正确的用法是从
success
或error
回调调用console.log
(或您想要的任何内容)。当
XMLHttpRequest
不可用时,已知的解决方案是如何优雅地降级。这些解决方案包括创建和附加script
或iframe
,然后从它们的.onload
处理程序中读取。所有这些都是异步的,前面的所有注意事项都直接适用于它们。
您无法从异步函数接收同步结果。
我坚持这一真理,反对所有的反对票。“我一直在寻找AJAX函数”-您是否尝试过编写AJAX函数?问题中的URL是否来自不同的域?请注意,通常Ajax是异步的,因此Ajax函数不会直接返回结果,而是通过回调函数或promise返回结果。处理XMLHttpRequest对象和浏览器不一致有很多细微差别。封装它的库将使您的生活更轻松。有很多关于使用XMLHttpRequest对象的例子,你的console.log放错了地方。他们需要在loadJSON回调中你的问题是什么?你的代码不起作用吗?@torazaburo实际上它不起作用。它是我试图做什么的指南,但我承认它没有帮助。简而言之,我需要在URL1中显示用户JSON中的所有用户名,但在名称旁边,我必须显示该用户在位于URL2的posts JSON中通过用户ID发布的帖子数量。不确定为什么会被否决,但我怀疑这是因为您说“无法从异步函数接收同步结果”然后推荐一个用户实现的模式来实现这一点。也许你的意思是没有本机函数可以做到这一点?@BotNet我提到的哪种模式返回同步结果?使用回调是同步的一种形式。一系列AJAX调用可能会触发异步函数,但是如果您锁定它们的回调,那么您将利用一种方法来衡量事件的同步性。首先这样做,然后当它完成时,这样做(一个发生在另一个之前,另一个等待第一个完成-这是由单词synchronous的松散定义决定的)