我有一个很好地提交的ajax帖子,但是我需要在提交之前将它与jQuery Validate结合使用,而我却无法使其正常工作。
我尝试在提交处理程序中提交ajax,但这会使我的表单中的某些字段消失,或者在某些情况下不会更新我的数据库。
单独使用它可以正常工作:
$('#myform').submit(function(e){
e.preventDefault();
var url = 'http://example.com';
var data = $('#myform').serializeArray();
$.ajax({
type: "POST",
url: url,
data: data,
success: function(){
$('.pop_up').fadeOut();
}
});
});
但是以下代码不能100%工作(只是有时和某些部分)。有时它会发布电子邮件字段为空,有时候其他字段也很糟糕。
var url = 'http://example.com';
var data = $('#myform').serializeArray();
$('#myform').validate({
rules: {
emailaddress: {
required: true,
email: true
},
meeting: {
required: {
depends: function () {
return $('input[name=in_12_months]').is(':checked')==false && $('input[name=in_6_months]').is(':checked')==false
}
}
}
},
submitHandler: function(form) {
$.ajax({
type: "POST",
url: url,
data: data,
success: function(){
$('.pop_up').fadeOut();
}
});
}
});
与Submithandler分离的验证有效,因此除非必填字段正常,否则不会发布。
那么如何将这些与100%可靠的数据结合起来呢?
我的网页上有多个表单,我是否应该使用submitHandler: function(form)
来解决特定表单?
答案 0 :(得分:0)
您的代码......
var url = 'http://example.com';
var data = $('#myform').serializeArray();
$('#myform').validate({
.....
submitHandler: function(form) {
$.ajax({
type: "POST",
url: url,
data: data, ....
您无法序列化submitHandler
之外的数据。它在这里不起作用,因为在调用.serialize()
时表单是空的。
将其置于submitHandler
内,同时利用回调函数的form
参数...
$('#myform').validate({
.....
submitHandler: function(form) {
$.ajax({
type: "POST",
url: url,
data: $(form).serialize(),
....
您可能还想使用.serialize()
代替.serializeArray()
。
阅读the .ajax()
documentation for data
:
要发送到服务器的数据。如果不是字符串,它将转换为查询字符串。它附加到GET请求的URL。请参阅processData选项以防止此自动处理。对象必须是键/值对。如果value是一个数组,jQuery会根据传统设置的值使用相同的键序列化多个值(如下所述)。