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

时间:2014-12-22 23:23:09

标签: javascript jquery json object

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

到目前为止我所拥有的是

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

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

所以问题是:

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

3 个答案:

答案 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(案例)。