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

时间:2015-07-26 20:26:15

标签: javascript jquery ajax asynchronous getjson

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

关于这个问题的Google搜索,我看到我必须在第一种方法中进行回调,但它对我不起作用。那么,当第二种方法中的“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');
            }
        }
    }   
};

对此的一些帮助将非常渺茫。

2 个答案:

答案 0 :(得分:1)

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');
                  }
       })
   })
}   

答案 1 :(得分:0)

我可能会遗漏一些东西,因为看起来太容易了..

     });
    }).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中,我会检查是否设置了警报,然后执行警报..