如何在另一个函数中使用 $.getJSON 返回的变量

How to use a variable returned by $.getJSON in another function

我有一个具有多个属性和方法的 javascript 对象。我想在第二个方法中调用第一个方法,以获取披萨的默认配料数量并将其与另一个值进行比较。但是,我发现在第二种方法的比较中没有值。

谷歌搜索这个问题,我看到我必须在第一种方法中进行回调,但它对我不起作用。那么,当第二种方法中的 'click' 事件发生时,我如何确定 属性 obj.app.defaultIngredients 将具有 JSON 返回的值?而且,在那一刻,我可以比较您在第二种方法中也看到的值?

有我的(不工作)代码:

obj = {};
obj.app = {

    defaultIngredients: '',

    getDefaultIngredientsNumber: function() {
        $.getJSON('/sites/all/json/pizza.json', function(data) {
            var node = $('.node').attr('data-nid'),
                node = 'node-' + node; // returns something like 'node-3'
                $.each(data, function(key, val) {
                  // This returns an integer
             obj.app.defaultIngredients = parseInt(data[node].general.default_ingredients);
                });
        }).done(function() {
            return obj.app.defaultIngredients;  
        });
    },

    customAddToCart: function() {
        $('#button').click(function(){
            var defaultIngredients = obj.app.getDefaultIngredientsNumber();
            var selectedIngredients = 0;    
            if defaultIngredients >= selectedIngredients) {
                alert('Add some ingredients');
            }
        }
    }   
};

我们将不胜感激。

我可能遗漏了一些东西,因为看起来太简单了..

     });
    }).done(function(data) {
        return anotherfunction(data);  
    });

或者代替这个:

 customAddToCart: function() {
     $('#button').click(function(){
         var defaultIngredients = obj.app.getDefaultIngredientsNumber();
          var selectedIngredients = 0;    
        if defaultIngredients >= selectedIngredients) {
              alert('Add some ingredients');
        }
      }
   }   
};

我会用这个:

customAddToCart: function() {
    $('#button').click(function(){
         obj.app.getDefaultIngredientsNumber("alert");
    }
}   
};

并且在 getDefaultIngredientsNumber 中我会检查是否设置了警报,然后执行警报..

getDefaultIngredientsNumber: function(callback) {
   $.getJSON('/sites/all/json/pizza.json', function(data) {
        var node = $('.node').attr('data-nid'),
        node = 'node-' + node; // returns something like 'node-3'
        $.each(data, function(key, val) {
            obj.app.defaultIngredients = parseInt(data[node].general.default_ingredients);
        });

        callback(obj.app.defaultIngredients)
   })
},

customAddToCart: function() {
  $('#button').click(function(){
       obj.app.getDefaultIngredientsNumber(function(defaultIngredients) {
                  var selectedIngredients = 0;    
                  if (defaultIngredients >= selectedIngredients) {
                       alert('Add some ingredients');
                  }
       })
   })
}