我有一个在另一个函数内部运行的函数,但有时看起来我对服务器的ajax调用在调用函数之前还没有完成运行。
function getPlans(row, user, id, type) {
$.get( "/plans/" + user + "/" + id + "/" + type + "", function(data) {
$("#permissions_" + row + "_plan_type").empty();
$(data).each(function(i, e) {
$("#permissions_" + row + "_plan_type").append("<option>" + e + "</option>");
})
}).done(function() {
getPermissions(row, user, type);
})
}
答案 0 :(得分:4)
作为快速解决方案,您可以使用.ajax
进行async: false
来电
function getPlans(row, user, id, type) {
$.ajax({
url:"/plans/" + user + "/" + id + "/" + type + "",
type: 'GET',
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function(data) {
$("#permissions_" + row + "_plan_type").empty();
$(data).each(function(i, e) {
$("#permissions_" + row + "_plan_type").append("<option>" + e + "</option>");
})
},
async:false // make synchronous
});
getPermissions(row, user, type);
}
解决方案2 :您可以使用jQuery中的.when
。
function getPlans(row, user, id, type) {
var dfd = $.Deferred();
$.when( $.get( "/plans/" + user + "/" + id + "/" + type + ""))
.done(function(data) {
$("#permissions_" + row + "_plan_type").empty();
$(data).each(function(i, e) {
$("#permissions_" + row + "_plan_type").append("<option>" + e + "</option>");
})
});
getPermissions(row, user, type);
}
答案 1 :(得分:3)
尝试从成功回调中调用getPermissions()
。
function getPlans(row, user, id, type) {
$.get( "/plans/" + user + "/" + id + "/" + type + "", function(data) {
$("#permissions_" + row + "_plan_type").empty();
$(data).each(function(i, e) {
$("#permissions_" + row + "_plan_type").append("<option>" + e + "</option>");
});
getPermissions(row, user, type);
});
}