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

时间:2018-03-03 19:03:56

标签: php jquery

我试图让它工作并且不成功,我尝试了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 vaidate函数

$(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';
    }
}  

2 个答案:

答案 0 :(得分:1)

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

您只需要删除

name: true,

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

  

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

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

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

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

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

答案 1 :(得分:-2)

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

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