javascript同步ajax通话问题

时间:2013-11-25 22:54:31

标签: javascript

我试图从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之后,应该追加它,然后发生下一次调用

1 个答案:

答案 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);
        }
    });
});