如何在全局变量中存储$ .getJSON对象并在以后导航它

我正在尝试使用JQuery并尝试创建一个函数来从JSON返回的API获取动态数据并将其存储在全局变量中(我不知道这是否是正确/最好的方法)。

到目前为止我所拥有的是什么

function getdata(url){ var data = $.ajax({ type: 'GET', url: url }); return data; }; 

到目前为止一切正常,但这会返回一个带有“responseJSON”键的对象,我似乎无法找到导航到此键的方法,然后通过其中的数组执行$ .each循环。

所以问题是:

  1. 这是正确/方式(如果没有请解释你的答案)
  2. 如何在“responseJSON”键中浏览包含数组的多维对象。

另一种方法是将回调传递给您的函数,这样您就可以在函数中设置响应处理程序,并在调用getData方法时设置更少的代码

 function getdata(url, callback){ var data = $.ajax({ type: 'GET', url: url }).done(callback).error(function(){ alert('Oppps...something went wrong') }); return data; }; getData('urlstring', function(data){ /* doSomething with data */ }) 

AJAX是异步的 。 这意味着它在后台运行,而其余的脚本运行。 在将来AJAX调用完成时,您可以访问它。

在jQuery中, $.ajax返回一个promise。 所以你可以做的是以下几点:

 getdata('/path/to/your.json').done(function(data){ // Use your JSON data here console.log(data); }); 

发生的事情是,一旦AJAX调用完成,您的.done()函数将运行,您将可以访问返回的数据。

不要尝试访问$.ajax对象的属性(在调用完成之前不会填充responseJSON )。 使用回调来获取返回的数据。

如果希望json数据在全局范围内,只需定义一个全局变量(即在函数外部),然后在函数中用返回的数据填充它。 像这样的东西:

 var api_response; function get_data(url) { $.post(url, function(j) { api_response = j; }, "json"); // or $.getJSON(url, function(j) { api_response = j; }); } 

你甚至不需要为此创建一个函数,并且可以使用jquery自己的$ .getJSON( 或者 case)。