jquery自定义验证器调用php函数不起作用

时间:2013-06-20 15:56:21

标签: jquery ajax jquery-validate

我有一个使用jquery插件编写的自定义验证器,它调用服务器上的php页面以使用数据库验证输入。我不知道该怎么做但是这是我能想到的最好的因为我不是javscript / ajax程序员

jQuery.validator.addMethod('checkVehicleRegistration', function(val, element) {

        var x = $.ajax({
        type: "POST",
        async: false,
        url: "ajax/validation/checkVehicleRegistration.php",
        data: "vehicle_reg=" + val,
        success: function(resp) {

        },
        error: function(e) {alert('checkVehicleRegistration failed' + e);}
    }); 

    if (x.responseText == '0') {return true;} else {return false;}

}, 'Registration already exists');

当然,这不是世界上最好的代码,因为我必须使ajax调用同步,这种方式会破坏它的所有对象。然而,因为我不是一个javascript程序员,所以它的奇迹就可以了。

我的问题是验证非常慢。 jquery似乎多次调用此验证函数。我已经尝试使用警报来找出调用验证函数的时间,并且当您在相应的文本框中键入时,当您从文本框中跳出标签时以及提交表单时,似乎验证被称为多个。

如何设置此自定义验证功能,以便仅在用户按下提交时调用,而不是在文本框中键入/标签时调用?对于我应该如何使用ajax更好地完成此服务器端验证的“设计模式”上的任何建议都非常感激

非常感谢

感谢

1 个答案:

答案 0 :(得分:0)

您不需要创建自己的方法,远程方法可以执行您需要的所有操作,例如,这是验证电子邮件地址,检查是否已存在或某些内容的方法,另外还会传递用户名通过邮件:

$( "#myform" ).validate({
    rules: {
        email: {
            required: true,
            email: true,
            remote: {
                url: "check-email.php",
                type: "post",
                data: {
                    username: function() {
                        return $( "#username" ).val();
                    }
                }
            }
        }
    },
    messages:{
        email:{
            remote:"Type your message here"
        }
    }
});

此外,您可以停用某些事件,以便更快,例如,这只会在您提交表单时检查验证:

$( "#myform" ).validate({
    onfocusout: false,
    onkeyup: false,
    onclick: false,
    rules: {
    }
});