如何使用jquery延迟与vktemplate /排队ajax请求

当我尝试使用jquery延迟时,使用vktemplate并不是很有效。 由于vktemplate对其自己进行了ajax调用,因此在vktemplate完成其工作之前,deferred会被解析,并且它的可选回调也会被解析。 我怎样才能设置vk,以便在这两件事发生之后才能解决承诺?

$(document).on('click', '.ajax', function() { $.when(ajax1('

first

'), ajax2('

second

'), ajax3('

third

')) .then(function(results1, results2, results3) { console.log(results1); $('.document').append(results1); $('.document').append(results2); $('.document').append(results3); alert('all ajax done'); }); }); function ajax1(data) { $.ajax({ type: 'post', url: 'templates/test_template.tmpl', data: "data=" + data, dataType: 'json', success: function (returnedData) { $('#resultsDiv').vkTemplate('templates/test_template.tmpl', returnedData, function () { //vk callback //possibly call my resolve here? }); } }); } function ajax2(data){//more of the same}

由于vkTemplate不返回任何内容,因此您需要手动创建延迟并使用所需数据成功回调。

 function ajax1(data) { var dfd = $.Deferred(); $.ajax({ type: 'post', url: 'templates/test_template.tmpl', data: "data=" + data, dataType: 'json', success: function (returnedData) { $('#resultsDiv').vkTemplate('templates/test_template.tmpl', returnedData, function (el, data, context) { dfd.resolveWith(context, [$(el)]); }); } }); return dfd.promise(); }