【问题标题】:JQuery remote validation not workingJQuery远程验证不起作用
【发布时间】:2013-08-12 18:15:36
【问题描述】:

我有一个注册表单,我在其中添加了一个 JQuery 验证插件远程验证。远程验证的目的是检查用户输入的电子邮件/和用户名是否已经存在于我的数据库中(即已经在使用中) ,如果是,将返回一条错误消息。在我添加远程验证之前,表单正在工作。

现在,即使我输入的所有数据都是正确的,我也无法提交表单,而且雪上加霜的是,当我输入数据库中已经存在的电子邮件时,不会出现错误消息。

我的 JQuery 代码:

    $(document).ready(function(){
<!--AJAX Call to retrieve type & subtype of industries-->
    $("#type").load("getregtype.php");

    $('#type').change(function(){
        var type=$('#type').val();
        $('#subtype').load('getregsubtype.php?type='+type);
    });
<!--End of AJAX Call -->

<!--JQuery validation of registration form-->
<!--Set default message for 'equalTo' errors-->
$.extend($.validator.messages, { equalTo: "The values you entered do not match." });
    $("#regform").validate({

        // Specify the validation rules
        rules: {
            username: "required",

            password: {
                required:true,
                minlength:6,
            },

            cpassword: {
                required: true,
                minlength: 6,
                equalTo: "#password"
            },  

            email: {
                required: true,
                email: true,
                remote:"emailcheck.php"
            },

            cemail: {
                required: true,
                email: true,
                equalTo:"#email"

            },

            type: {
                required: true
            },

            subtype: {
                required: true
            },
            name: "required"
        },

        // Specify the validation error messages
        messages: {
            username: "Please enter a username",
            email: {
                required:"Please enter an email address",
                email:"Please enter a valid email address",
                remote:jQuery.format("{0} is already in use")
            },
            cemail: {
                required:"Please enter an email address",
                email:"Please reenter your email address",

            },

            password: {
                required: "Please enter a password",
                minlength: "Your password must be at least 6 characters long"
            },
            cpassword: {
                required:"Please reenter your password",
                minlength: "Your password must be at least 6 characters long"

            },
            name: "Please enter the name of your business"
        },

        submitHandler: function(form) {
            form.submit();
        }
    });


});

我的 PHP 页面被远程调用。

 <?php

include("cxn.inc");

$query=$cxn->prepare("SELECT * FROM `testdb`.`business` WHERE `Email` = :email");
$query->bindValue(":email",$_GET['email']);
$query->execute();
$count=$query->rowCount();
$mail=$_GET['email'];
print_r($mail);
echo"$count";
if($count>0)
{

    echo json_encode('false');

}
else
{
    echo json_encode('true');
}

?>

尝试过的事情

print_r($mail) 和 echo"$count";两者都返回正确的值。我也尝试过

echo json_encode(true);

还有

return true;

编辑

我尝试了更多的东西。

echo true;

我也尝试过直接通过 url 传递电子邮件的值,如果该值没有被传递给 'emailcheck.php' 这样做的可能性很小

email: {
            required: true,
            email: true,
            remote:"emailcheck.php?email=test@test.com"
        },

但我的表单仍然不起作用。

感谢您对我的问题的任何见解。

谢谢!

【问题讨论】:

  • 而不是使用 json_encode 只是尝试回显真或假。
  • @aneesh 我已经尝试过你的建议 aneesh,但它不起作用。我输入了一个已经存在于数据库中的电子邮件 btu 没有显示任何消息,同样在按下提交按钮后,什么也没发生,我无法提交表单。
  • 请检查您的萤火虫控制台是否有任何 javascript 错误

标签: php validation jquery jquery-plugins


【解决方案1】:
            remote: {
                url: "check-email.php",
                type: "post",
                data: {
                    email: function() {
                        return $("[name='email']").val();
                    }
                }
            }

然后从 PHP 文件 check-email.php 中回显 true 或 false,如下所示:

echo 'false';

 echo 'true';

不回显错误;或回声真实; !!!

【讨论】:

    【解决方案2】:

    您的 PHP 脚本需要一个名称为 email 的 GET 参数。只是为了消除这里出现错误的可能性,您可以在 jQuery 代码中明确设置:

        rules: {
            /* Code skipped ... */
    
            email: {
                required: true,
                email: true,
                type: "get",
                remote:"emailcheck.php"
                data: {
                    email: function() {
                               return $("#email").val();
                           }
                }
            },
            /* ... */
    

    确保$('#email') 真正匹配您的表单输入。

    您还可以使用 Firebug 或等效工具检查响应(只需在浏览器窗口中按 F12 即可查看出现了什么),您可能需要确保响应的 mimetype 为 application/json

    【讨论】:

    • 为我工作。
    【解决方案3】:

    首先检查控制台中的 js 错误,如果没有问题,还要检查你的脚本发送的内容以及他从 php 收到的内容

    【讨论】:

      猜你喜欢
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多