我有多个由Ajax异步请求填充的HTML列表。当所有这些请求完成后(其中有很多),我需要通过选择与我的客户记录对应的列表项来填充表单。
我正在尝试使用延迟来完成此任务,但该函数在填充列表之前很久就会终止。有什么想法吗?
$.when(
$.ajax({
url: "get-status.php",
async: true,
dataType: 'json',
success: function (j) {
var options = '';
$.each(j, function(key, value) {
options += '<option value="' + key + '">' + value + '</option>';
});
$("select#status_id").html(options);
}
}),
$.ajax({
url: "get-groups.php",
async: true,
dataType: 'json',
success: function (j) {
var options = '';
$.each(j, function(key, value) {
options += '<option value="' + key + '">' + value + '</option>';
});
$("select#group_id").html(options);
}
})
).then(populateForm('form1',customer_id));
实际应用代码:
<!-- Main function -->
populateFormBoxSS = function(id){
$.ajax({
url: "get-json-fich_ss.php?id="+id,
async: false,
dataType: 'json',
success: function (j) {
// Populate drop-downs
$.when(populateEstadosTest('box-estado_id')).then(populateFormGeneric(j, "box"));
}
});
}
<!-- Generic Form Population -->
populateFormGeneric = function (j, target) {
$.each(j, function(key, value) {
switch ($('#'+target+'-'+key).attr('type')) {
case 'checkbox':
if(value==1) {
$('#'+target+'-'+key).attr('checked', true);
}
break;
default:
$('#'+target+'-'+key).val(value);
break;
}
});
return function(){
// Do nothing
}
}
<!-- Dropdown list population -->
populateEstadosTest = function(field){
var dfd = new $.Deferred();
$.ajax({
url: "get-json-esta.php",
async: true,
dataType: 'json',
success: function (j) {
var options = '';
$.each(j, function(key, value) {
options += '<option value="' + key + '">' + value + '</option>';
});
$("select#"+field).html(options);
// Resolve Deferred
dfd.resolve();
}
});
return dfd.promise(); // Returns a promise
}
答案 0 :(得分:0)
populateForm('form1')是否返回一个函数?延迟。然后期望回调函数,例如那样:
var populateForm = function (j, target) {
return function() {
$.each(j, function(key, value) {
switch ($('#'+target+'-'+key).attr('type')) {
case 'checkbox':
if(value==1) {
$('#'+target+'-'+key).attr('checked', true);
}
break;
default:
$('#'+target+'-'+key).val(value);
break;
}
});
}
}
$.when(
$.ajax({
url: "get-status.php",
async: true,
dataType: 'json',
success: function (j) {
var options = '';
$.each(j, function(key, value) {
options += '<option value="' + key + '">' + value + '</option>';
});
$("select#status_id").html(options);
}
}),
$.ajax({
url: "get-groups.php",
async: true,
dataType: 'json',
success: function (j) {
var options = '';
$.each(j, function(key, value) {
options += '<option value="' + key + '">' + value + '</option>';
});
$("select#group_id").html(options);
}
})
).then(populateForm('form1',customer_id));