我有两个Ajax请求,第一个在each((内部,第二个在每个((外部。问题是第一个请求的成功内部的代码非常重要,应该在第二个 Ajax 请求之前执行。
执行代码后,第一个 Ajax 请求被发送到服务器,但只有在第二个 ajax 请求执行后才能成功执行。
执行顺序:
first ajax
second ajax
success of first ajax
success of second ajax
有没有办法让第二个 ajax 等到第一个 ajax 的成功结束,然后被执行?
$(document).on("change",
".jsQuestionType",
function() {
// alert("The dropdown has been changed.");
var dropdownList = $(this);
var optionTypeId = $(dropdownList).val();
//get the jsQuestionSection
var question = $(dropdownList).parent().parent().parent();
//get the list of jsQuestionOptions
var questionOptions = $(dropdownList).parent().parent().parent().find(".jsQuestionOptions");
// loop in all questionOptions of the selected question
$(questionOptions).each(function(i, e) {
//alert($(e).find("input.jsInputName").attr("questionOptionsId"));
var optionId = $(e).find("input.jsInputName").attr("questionOptionsId");
$.ajax({
url: "/api/QuestionOptions/" + optionId,
method: "DELETE",
success: function(data) {
$(e).remove();
}
});
});
//End loop
var questionId = $(question).find("input.jsInputName").attr("questionId");
// if (questionOptions.length == 0) {
// create the new option using the value sent by dropdown
$.ajax({
url: "/api/QuestionOptions/" + optionTypeId + "/" + questionId,
method: "POST",
success: function(data) {
alert(data);
var d = data;
}
});
//}
});
您可以在循环中创建一个请求承诺的数组,并在所有先前的 ajax 解析后使用$.when
在循环外调用 ajax,如果这是您要完成的
var requests = $(questionOptions).map(function(i, e) {
var optionId = $(e).find("input.jsInputName").attr("questionOptionsId");
// return ajax promise
return $.ajax({
url: "/api/QuestionOptions/" + optionId,
method: "DELETE",
success: function(data) {
$(e).remove();
}
});
}).get();
$.when.apply($, requests).then(function(){
// all the above requests completed
// do next request
})