我试图从ajax调用中获取htmls的名称列表,然后为每个html另一个ajax调用,然后我尝试使用handlebar追加它。但是下面的代码不会发生这种情况。有人可以帮我调试它:
$.getJSON('api/filterTemplate/' + pageName.page, function (data) {
var promises = [];
$.each(data, function (i, rec) {
promises.push($.get('commonCore/templates/' + rec.templateHtml));
});
$.when.apply(this, promises).then(function() { //after all requests complete
$.each(arguments, function(i, html) {
var filterTemplate = Handlebars.compile(html);
replaceFilterTemplate(filterTemplate,data[i].classids);// this functions appends html to div -data[i].classids
})
})
});
在获取每个html之后,应该追加它,然后发生下一次调用
答案 0 :(得分:0)
$.get
返回jqXHR对象。这就是您实际添加到promises
数组中的内容。
您应该使用同步调用,或重新格式化代码以处理所有提取异步,然后继续执行承诺。
Synchrone替代方案:
$.each(data, function (i, rec) {
$.ajax({
url: 'commonCore/templates/' + rec.templateHtml,
async: false,
success: function(result) {
promises.push(result);
}
});
});