我有以下设置:
input
字段上的输入发生变化时,jQuery
将触发ajax
个事件。并且input.data("checking", true)
被调用。ajax
事件完成后,系统会调用input.data("checking", false)
。现在,我想制作一个自定义form
submit
,等待此input
中的所有form
位于input.data("checking") === true
。
到目前为止,我的代码没有应用问题:
$(document).on("submit", "form", function(event) {
event.target.checkValidity();
event.preventDefault();
event.stopPropagation();
//TODO: prevent this when not everything is checked
var dataSerialized = $(this).serialize();
var service = $(this).attr("action");
$.ajax({
url: "services/" + service + ".php",
data: dataSerialized,
type: "POST",
cache: false,
success: function(html) {
if (html == "1") {
//TODO: load page from json callback
//loadPage(onsuccess);
}
else {
loadPage("error");
}
},
error: function(html, message) {
finalError(message);
}
});
});
在所有 ajax事件完成之前,我怎么能让这个功能等待(非阻塞!)?
答案 0 :(得分:1)
假设创建一个函数checkDone
,在true
表单中的所有input.data("checking") == false
返回input
时,您可以这样做:
$(document).on("submit", "form", function(event) {
event.target.checkValidity();
event.preventDefault();
event.stopPropagation();
var that = $(this);
var interval = setInterval(function() {
if(checkDone(that)) {
clearInterval(interval);
var dataSerialized = that.serialize();
var service = that.attr("action");
$.ajax({
url: "services/" + service + ".php",
data: dataSerialized,
type: "POST",
cache: false,
success: function(html) {
if (html == "1") {
//TODO: load page from json callback
//loadPage(onsuccess);
}
else {
loadPage("error");
}
},
error: function(html, message) {
finalError(message);
}
});
}
}, 500);
});
这样,如果您可以在验证所有输入后提交表单,则每0.5秒检查一次,如果是,则清除时间间隔并提交表单。
但我建议不要在提交后删除标准服务器端验证。