我正在尝试使用JQuery并尝试创建一个函数来从JSON返回的API获取动态数据并将其存储在全局变量中(我不知道这是否是正确/最好的方法)。
到目前为止我所拥有的是
function getdata(url){
var data = $.ajax({
type: 'GET',
url: url
});
return data;
};
到目前为止一切正常,但这会返回一个带有“responseJSON”键的对象,我似乎无法找到导航到此键的方法,然后通过其中的数组执行$ .each循环。 / p>
所以问题是:
答案 0 :(得分:3)
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
。)使用回调来获取返回的数据。
答案 1 :(得分:3)
另一种方法是将回调传递给您的函数,这样您就可以在函数中设置响应处理程序,并在调用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 */
})
答案 2 :(得分:0)
如果希望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(或案例)。