我需要通过在Javascript上使用循环来$.getJSON
文件:
///////JS.serial =[156,256] but i can have more than 2 values//
var Electricity = {
refreshJson : function() {
for(var i=0; i<JS.nbre_serials;i++)
url = 'json/kw/kw_'+JS.serials[i]+'.json';
$.getJSON(url, function(data){
// ???
Electricity.processConsumption(data_156,data_256);
});
},
我希望将每个对象存储在变量中(即var datas_156
)。
答案 0 :(得分:0)
您可以使用$.when,这样您就可以在所有结果准备就绪后致电Electricity.processConsumption
。这是可能的,因为$.getJSON
返回一个与promise兼容的对象。
refreshJson : function() {
var promises = [];
for(var i=0; i<JS.nbre_serials;i++){
var url = 'json/kw/kw_'+JS.serials[i]+'.json';
promises.push($.getJSON(url));
}
$.when.apply($, promises)
.done(function(data_156, data_256){
Electricity.processConsumption(data_156,data_256);
})
.fail(function() {
//handle errors
});
}
在示例中$.when.apply($, promises)
被调用,因为$.when
不接受承诺数组,而是接受可变数量的参数。
与调用Electricity.processConsumption
的方式相同,因此每次添加新的“序列”时都不必更改代码。
refreshJson : function() {
var promises = [];
for(var i=0; i<JS.nbre_serials;i++){
var url = 'json/kw/kw_'+JS.serials[i]+'.json';
promises.push($.getJSON(url));
}
$.when.apply($, promises)
.done(function(){
Electricity.processConsumption.apply(Electricity,arguments);
})
.fail(function() {
//handle errors
});
}
您的processConsumption
功能可能类似于:
//somewhere in the Electricity class
processConsumption: function(){
var data_156 = arguments[0];
var data_256 = arguments[1];
//do stuff
}