【问题标题】:How to store $.getJSON object in global variable and navigate through it later如何将 $.getJSON 对象存储在全局变量中并稍后浏览它
【发布时间】:2014-12-22 23:23:08
【问题描述】:

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

到目前为止我所拥有的是

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

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

所以问题是:

  1. 这是正确的/方式吗(如果不是,请解释您的答案)
  2. 如何在“responseJSON”键中包含数组的多维对象中导航。

【问题讨论】:

  • 当且仅当 later 是保证是 after 的时间时,您正在做的事情才会奏效ajax 请求已完成。我的假设是事实并非如此。你能举一个更完整的例子,说明“稍后”是什么意思吗?

标签: javascript jquery json object


【解决方案1】:

另一种方法是将回调传递给您的函数,以便您可以在函数内设置响应处理程序,并在调用 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 */
})

【讨论】:

  • 很好的部分是你留在了回报中,所以你仍然可以使用承诺。
  • @KevinB 非常灵活的模式,我也喜欢
【解决方案2】:

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

在 jQuery 中,$.ajax 返回一个承诺。所以你可以做的是:

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

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

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

【讨论】:

    【解决方案3】:

    如果想让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( 情况)。

    【讨论】:

    • 这种方法的问题是您不知道它何时或是否已返回到全局变量。学习时并不总是最好的起点
    • @charlietfl 是的,我同意。但它可以用于某些情况。我通常使用像这样的全局变量来缓存返回的数据(当我知道它在会话中保持不变时)以避免多次调用。
    猜你喜欢
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多