我有一个问题,我的提交事件有时会在不等待 ajax 调用的情况下完成。我真的不明白这里发生了什么。有时它似乎在等待,我得到了成功和完成的消息,而其他时候它会触发提交操作而不等待并加载下一页。
function SetUpAjax() {
$.ajaxSetup({
data: "{}",
dataType: "json",
type: "POST",
contentType: "application/json"
});
}
function SaveBooking(booking) {
$.ajax({
url: HOST + "api/SaveBooking",
data: JSON.stringify({
booking: booking
}),
success: function(resdata) {
alert("SaveBooking Saved")
}
});
}
$(document).ready(function() {
SetUpAjax();
});
function Generate() {
if ($('#addbookingaction').valid()) {
try {
var booking = GetBookingFromForm()
} catch (err) {
alert("error" + err)
return false
}
$.when(SaveBooking(booking)).done(function(data, textStatus, jqXHR) {
alert("Booking Saved")
return true
}).fail(function(data) {
alert("Save Booking failed")
return false
})
} else {
return false;
}
}
// Pug html
input(type = "submit", id = "save", name = "save", value = "Save", onclick = "return Generate()")
我的理解是,“何时”调用应该等待 SaveBooking ajax 函数完成,然后再返回 true 或 false。但是,似乎 Generate 函数有时会在 Ajax 有机会执行之前返回 true,因此我没有收到“已保存”警报。当我检查服务器响应时,它总是响应成功。
如果我将 return false 放在 Generate 函数的底部,那么我总是会收到“已保存”警报,但页面不会退出,因为 onclick 事件返回 false。
我觉得我在这里要疯了。我不明白为什么行为会不一致(也许是竞争条件?)。任何人都可以提供帮助吗?