我使用jquery的每个函数循环参数。我正在推动从“get”方法到数组的所有数据。一旦我的阵列准备就绪,我需要调用骨干功能..
我这样做:
var temps = [];
$.each(views,function(i,view){
$.get("js/temp/" + view + ".html", function(data){
temps.push(data);
console.log(temps); //results correctly.
})
})
$.when.apply(null,temps).done(function(){
console.log(temps); //results as undefined
});
但是我得到的结果是'未定义'..这里有什么问题......有人找到我了吗?
添加更多问题,使用我做的答案..
$.each(views,function(i,view){
var d = $.Deferred();
requests.push(d.promise());
$.get("js/temp/" + view + ".html", function(data){
view.prototype.template = _.template(data);//not working when i use the string parameter..
appView.prototype.template = _.template(data); //it works
temps.push(data);
d.resolve();
})
})
如何将字符串参数转换为返回函数..?
答案 0 :(得分:3)
您需要另一组延迟对象来处理此问题:
var temps = [];
var requests = [];
$.each(views,function(i,view){
var d = $.Deferred();
requests.push(d.promise());
$.get("js/temp/" + view + ".html", function(data){
temps.push(data);
console.log(temps); //results correctly.
d.resolve();
})
})
$.when.apply(null,requests).done(function(){
console.log(temps); //results as undefined
});
使用ajax deferreds:
var requests = [];
$.each(views,function(i,view){
var d = $.get("js/temp/" + view + ".html");
requests.push(d);
})
$.when.apply(null,requests).done(function(){
console.log(arguments); //results as undefined
});
答案 1 :(得分:0)
在请求完成后,您只填充temps
数组。
当您致电$.when()
时,数组仍为空。
相反,您需要创建未完成的AJAX请求的承诺数组:
var temps = views.map(function() {
return $.get("js/temp/" + view + ".html");
});