如何在全局变量中存储$ .getJSON对象并在以后导航它
我正在尝试使用JQuery并尝试创建一个函数来从JSON返回的API获取动态数据并将其存储在全局变量中(我不知道这是否是正确/最好的方法)。
到目前为止我所拥有的是什么
function getdata(url){ var data = $.ajax({ type: 'GET', url: url }); return data; };
到目前为止一切正常,但这会返回一个带有“responseJSON”键的对象,我似乎无法找到导航到此键的方法,然后通过其中的数组执行$ .each循环。
所以问题是:
- 这是正确/方式(如果没有请解释你的答案)
- 如何在“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)。