我有以下功能:
function getAggregateData(){
var sums = new Object();
$.getJSON("example.json.php", function(data) {
//for each month
c = 0;
$.each(data, function(key, val, index) {
//for each store
$.each(val, function(key2, val2, index2) {
if(c == 0){
sums[key2] = val2;
}
else{
sums[key2] += val2;
}
});
c++
});
})
return sums;
}
我接着称之为:
var totals = getAggregateData();
但是当我登录日志时,我感到非常难过:
console.log(totals)
揭示了这样一个对象:
store1 500
store2 900
store3 750
and so on and so forth...
但当我做console.log(totals['store1')
时,我得不到了。
我也试过console.log(totals.store1)
和console.log(totals[0].store1)
我遇到了某种类型的范围问题,或者我没有创建我认为我的对象。
答案 0 :(得分:2)
看起来该函数将返回一个空对象,因为它不等待AJAX调用完成。
如果您尝试在$ .getJSON回调中的最后一行执行console.log(totals.store1),那么可能会获得结果。
你需要将任何需要来自“example.json.php”的数据的代码放在一个只在AJAX调用返回后运行的回调中。
E.g。
function getAggregateData(){
var sums = new Object();
$.getJSON("example.json.php", function(data) {
//for each month
c = 0;
$.each(data, function(key, val, index) {
//for each store
$.each(val, function(key2, val2, index2) {
if(c == 0){
sums[key2] = val2;
}
else{
sums[key2] += val2;
}
});
c++
});
processAggregateData(sums);
})
}
function processAggregateData(totals) {
console.log(totals.store1);
}
getAggregateData();
答案 1 :(得分:0)
给出:
{
"1": {
"store1": 2450,
"store2": 1060,
"store3": 310
},
"2": {
"store1": 2460,
"store2": 1760,
"store3": 810
}
};
如果您打算为每个商店添加结果,这应该有用。
/**
* This functions need to be called when we have the data
*/
function processSums(obj){
console.log(obj);
}
function getAggregateData(){
var sums = {};
$.getJSON("example.json.php", function(data) {
$.each(data, function() {
$.each(this, function(key, val, index){
sums[key] = sums[key] || 0;
sums[key] += val;
});
});
// 4910
processSums(sums);
});
return sums;
}
getAggregateData();