我有一个表单,在提交时,会通过通常的e.preventDefault()并发送一个ajax请求。但是,如果此ajax请求返回某个条件,我希望正常提交表单。我如何实现这一目标?
// Submit handler
$(".reserveer_form").submit(function(event){
event.preventDefault();
$.ajax({
url: $(this).attr("action"),
data: $(this).serialize(),
success: function(data) {
if($(".messagered",data).length > 0){
var errors = $(".messagered",data);
$(".gegevens").before(errors);
} else {
// SUBMIT THE FORM!
}
}
});
})
答案 0 :(得分:6)
在窗体上调用本机submit
方法,以便它不会触发jQuery处理程序。
$.ajax({
context: this, // <-- set the context.
url: $(this).attr("action"),
data: $(this).serialize(),
success: function (data) {
if ($(".messagered", data).length > 0) {
var errors = $(".messagered", data);
$(".gegevens").before(errors);
} else {
this.submit(); // <-- submit the form
}
}
});
答案 1 :(得分:1)
由于您的评论表明您更改了表单变量,因此您可以通过检查相同的表单变量来启动submit
处理程序。如果更改,只需return true
。如果没有,请继续使用当前处理程序。
答案 2 :(得分:-1)
您可以使用submit()
method或表格:
$(".reserveer_form").submit(function(event){
event.preventDefault();
var form = this,
$form = $(form);
$.ajax({
url: $form.attr("action"),
data: $form.serialize(),
success: function(data) {
var errors = $(".messagered", data);
if (errors.length > 0){
$(".gegevens").before(errors);
} else {
form.submit();
}
}
});
})
然而,这似乎是一个奇怪的ajax请求。首先,您将表单(序列化,通过ajax)发送到服务器,当响应中没有错误时,您再次发送它?服务器将处理两次(并根据您的表单执行两次)。此外,用户没有收到他的输入已被处理的消息 - 他点击&#34;提交&#34;,它总是需要一段时间才能明显提交(他甚至可以改变一些输入)。