如何将jQuery Validate与此ajax结合使用?

时间:2016-12-06 16:11:19

标签: jquery ajax forms jquery-validate

我有一个很好地提交的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)来解决特定表单?

1 个答案:

答案 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会根据传统设置的值使用相同的键序列化多个值(如下所述)。