如何在另一个函数中使用 $.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');
}
})
})
}
我有一个具有多个属性和方法的 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');
}
})
})
}