繁体   English   中英

jQuery验证中的远程验证未返回

[英]Remote validation in jquery validation not returning

我尝试使它起作用,但未成功,我尝试了18种不同的方式来产生相同的结果。 我已仔细检查并三重检查了一切。 什么都没做! 如果jquery不起作用,我已经在服务器端进行了验证,作为后备。 验证部分工作正常,如果存在不正常的问题,则可以正常工作。

我的表格栏位

<div class="col-sm-12">
        <label>Name</label>
        <input type="text" class="form-control" autocomplete="off" name="name" id="name" value="<?php echo isset($_POST['name']) ? $_POST['name'] : '' ?>">
      </div>

我的jQuery验证功能

$(function() {

  $("form[name='register']").validate({    
    rules: {

         name: {
              required: true,
              name: true,
              remote: {
                url: "../includes/check.php",
                type: "post",
                data: {
                    name: function() {
                    return $( "#name" ).val();
                  }
                }
              }
            },


      email: {
        required: true,
        email: true
      },
      password: {
        required: true,
        minlength: 5
      }
    },

    messages: {

      name: {
          required: "Please enter your name",
          minlength: "Name must be at least 4 characters long",
          remote: "The name entered is unavailable"
          },

      password: {
        required: "Please provide a password",
        minlength: "Your password must be at least 5 characters long"
      },
      email: "Please enter a valid email address"
    },

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

我的查询脚本

include("db.php");

if(isset($_POST['name'])) {
    $name = $_POST['name'];

    $db = dbconnect();
    $stmt = $db->prepare("SELECT Name FROM users WHERE Name = ?");
    $stmt->bind_param('s', $name);
    $stmt->execute();
    $result = $stmt->get_result();

    if ($result->num_rows == 1){
        echo 'true';

    }else{
        echo 'false';
    }
}  

该问题与远程验证没有直接关系。

您只需要删除

name: true,

从您的验证选项中。 此选项在jQuery Validate中不存在-没有名为“ name”的验证方法-并在jQuery validate尝试使用它时导致Javascript错误:

无法读取未定义的属性“ call”。 检查元素名称时发生异常,请检查“名称”方法。

这意味着“远程”验证永远不会执行,因为脚本在到达它之前会崩溃。

请参阅https://jsfiddle.net/09djba33/10/以查看损坏的功能-打开开发人员工具并提交表单(名称字段已填写),并观察错误消息出现在控制台中。

https://jsfiddle.net/09djba33/12/来查看“远程”方法在没有该虚假选项的情况下能否正常工作。

PS这就是为什么在评论中,我一直要求您通过浏览器工具来查看ajax请求发生了什么... :-)

通过阅读文档https://jqueryvalidation.org/remote-method/,您可以看到在使用远程方式时,由于使用的是post方法,因此需要将数据发送到服务器端脚本。 这样做:

remote: {
                url: "../includes/check.php",
                type: "post"
                data: {
                username: function () {
                     return $('#username').val(); 
                }
        },

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM