jQuery单击-发布/获取返回成功';返回值
[name=AddClientSubmit]。。。是表单上的“提交”按钮 $.POST发送表单数据,POST脚本返回一个json响应,其中包含一条错误消息 如果没有错误消息,我希望将click函数返回为true,以便提交表单,如果有错误,则返回false 我下面的脚本的问题是javascript没有等待$.POST完全完成,而且从未设置submitForm值,因此表单会自动提交。jQuery单击-发布/获取返回成功';返回值,jquery,ajax,post,get,click,Jquery,Ajax,Post,Get,Click,[name=AddClientSubmit]。。。是表单上的“提交”按钮 $.POST发送表单数据,POST脚本返回一个json响应,其中包含一条错误消息 如果没有错误消息,我希望将click函数返回为true,以便提交表单,如果有错误,则返回false 我下面的脚本的问题是javascript没有等待$.POST完全完成,而且从未设置submitForm值,因此表单会自动提交。 $('[name="addClientSubmit"]').click(function() { var
$('[name="addClientSubmit"]').click(function() {
var submitForm = false;
var buttonObj = $(this);
buttonObj.hide();
$.post(
'/jquery/scripts/contacts_clientAddEdit.php',
$('#addClientForm').serialize(),
function(json) {
if(json.error == '') {
submitForm = 'yes';
} else {
jAlert(json.error, 'Error', function() {
buttonObj.show();
});
submitForm = 'no';
}
},
'json'
);
if(submitForm == 'yes') { return true; }
if(submitForm == 'no') { return false; }
});
问题是$.post方法是异步的,因此它将在提交完成之前返回。有一种方法可以关闭此功能,但它会导致浏览器挂起,有时会让用户觉得它崩溃了
与其创建两个单独的帖子,一个用于AJAX功能,另一个用于表单,为什么不将它们结合起来呢?这将解决您的问题,并为用户带来更快的响应时间。您可以通过以下方式修改代码来实现这一点:
$('[name="addClientSubmit"]').click(function() {
var submitForm = false;
var buttonObj = $(this);
buttonObj.hide();
$.post(
'/jquery/scripts/contacts_clientAddEdit.php',
$('#addClientForm').serialize(),
function(json) {
if(json.error == '') {
submitForm = 'yes';
return true;
} else {
jAlert(json.error, 'Error', function() {
buttonObj.show();
});
submitForm = 'no';
return false;
}
},
'json'
);
});
不幸的是,这个“新客户机”表单的设置方式在几个不同的管理部分中使用。提交表单后,每个管理部分都会将用户重定向到不同的页面。所以基本上,这个AJAX调用只是通过POST验证表单。我希望有另一份工作。我想我可以传入admin节类型,然后返回POST success函数可以处理的重定向URL。“我想我可以传入admin节类型,然后返回POST success函数可以处理的重定向URL。”我接受“我猜”,你觉得这可能有点像黑客,但我向你保证不是。服务器端重定向仍然会将URL返回给客户端,这只是由浏览器自动处理的。允许javascript处理这个机制从根本上来说没有什么错。谢谢你的帮助!我真的不认为这是一个黑客,我只是在这个项目上工作了很长时间,我希望我的第一个思考过程是正确的答案,因为我没有心情改变/重新编码。我理解这种情绪,但我可以向你保证,如果你实现的方法充分利用了AJAX方法学的潜力,你会感受到巨大的风险满足。该方法不起作用,因为返回true或false不在$.POST success函数之外。可以使用stop()和submit()函数以不同的方式工作。例如,在success函数中执行$('#addClientForm').submit()。