我试图让它工作并且不成功,我尝试了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';
}
}
答案 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();
}
},