Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用php函数的jquery自定义验证器不工作_Jquery_Ajax_Jquery Validate - Fatal编程技术网

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

调用php函数的jquery自定义验证器不工作,jquery,ajax,jquery-validate,Jquery,Ajax,Jquery Validate,我有一个使用jquery插件编写的自定义验证器,它调用服务器上的php页面,使用数据库验证输入。我不知道如何做到这一点,但这是我能想到的最好的方法,因为我不是javscript/ajax程序员 jQuery.validator.addMethod('checkVehicleRegistration', function(val, element) { var x = $.ajax({ type: "POST", async: false,

我有一个使用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似乎多次调用此验证函数。我曾尝试使用警报来确定何时调用验证函数,当您在相应的文本框中键入、从文本框中取出选项卡以及提交表单时,验证似乎被多次调用

如何设置此自定义验证函数,使其仅在用户按submit时调用,而不是在文本框中键入/标记时调用?此外,对于我应该如何使用ajax更好地完成服务器端验证的“设计模式”的任何建议,我都非常感谢

非常感谢


谢谢

您不需要创建自己的方法,远程方法会做您需要的一切,例如,这是一种验证电子邮件地址、检查是否已存在或其他内容的方法,并且它通过post传递用户名:

$( "#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: {
    }
});

您是否尝试过使用插件内置的
remote
验证方法?它使用异步AJAX,因此不会减慢速度。