(Ajax)在另一个ajax请求(不是在它内部)的成功代码之后执行一个ajax请求



我有两个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
})

最新更新