$('#post_form').submit(function() {
$("#ajax_bar_loader").show();
$.ajax({
url: 'add.html',
data: $('#post_form').serialize(),
dataType: 'json',
type: 'post',
success: function( result ) {
retVal = formCheck( result );
}
});
return false;
});
这就是我的代码看起来像而不是“return false”,如果“result”中包含的数据说明,我想允许它。我怎么能做到这一点?
答案 0 :(得分:3)
你可以这样做:
$.ajax({
url: 'add.html',
data: $('#post_form').serialize(),
dataType: 'json',
type: 'post',
success: function( result ) {
retVal = formCheck( result );
if(retVal)
$('#post_form').unbind('submit').submit();
else
alert('Error with your form! Oh crap!');
}
});
由于你回发并离开,这只是取消绑定这个处理程序,如果成功,并让提交在调用时正常发生,所以代码不会运行并再次检查,它只是提交。
答案 1 :(得分:2)
我建议始终在事件处理程序的末尾返回false
,以防止正常的表单提交。在成功回调到$.ajax
的过程中,您可以根据服务器的响应有条件地重定向:
$('#post_form').submit(function() {
$("#ajax_bar_loader").show();
$.ajax({
url: 'add.html',
data: $('#post_form').serialize(),
dataType: 'json',
type: 'post',
success: function( result ) {
if(result == 'something') {
alert("some error happened");
} else {
// assuming we're visiting the form's action
window.location.href = $(this).attr("action");
}
}
});
return false;
});
在提交处理程序完成执行之前依赖成功回调是不现实的,因为在成功回调执行之前很可能会评估$.ajax
调用之后的代码($.ajax
将异步运行)。
答案 2 :(得分:0)
success: function(result) { ... document.forms.post_form.submit(); }
答案 3 :(得分:0)
我不确定这是否适用于你的问题,但是如果你使ajax请求同步怎么办?
我将这个虚拟代码设置为“工作”,它会触发ajax请求,然后设置一个布尔值。然后表单根据布尔值返回true或false:
$(document).ready(function() {
$('form').submit(function() {
var should_return = false;
$.ajax({
async: false,
url: 'test.php',
type: 'post',
success: function() {
// Do some type of check
should_return = true;
}
});
return should_return;
});
});