我正在使用jQuery Validationremote
的方法来检查系统中是否已经存在用户名。如果用户存在,则脚本返回。does_user_exist.php
1
$registration.find(".username").each(function() {
var $this = $(this);
$this.rules('add', {
remote: {
url: "does_user_exist.php",
type: "post",
dataType: "json",
data: {uname: function(){ return $this.val(); } },
async: false,
success: function (data) { //returns 1 if user exists
if (data) {
console.log("false!");
return "Sorry, that user already exists." //doesn't work
//return false; //doesn't work
//return data; //doesn't work
//return {"string"}; //doesn't work
//return {0: "string"};//doesn't work
} else {
console.log("true!");
return true;
}
}
},
messages: {
remote: jQuery.format("{0}") //doesn't work
// remote: "Simple string doesn't work here either"
}
});
});
我的问题是永远不会显示错误消息。我可以从我的console.log
输出中看到它在用户存在时正确记录false!
,但错误消息永远不会出现。
正如您从注释掉的行中看到的那样,我一直试图通过猜测和检查来弄清楚我到底做错了什么,假设我以某种方式以错误的格式返回错误字符串,但是我没有成功。
Edit3:
我能够更改后端响应。PHP 现在正在发送 JSON 编码true
/ false
,但无济于事。我们尝试通过以下方式发送后端响应,但无论我们做什么,插件似乎都没有捕捉到它:
json_encode( false )
json_encode( '["false"]' )
json_encode( "false" )
json_encode( ["false"] )
"false"
false
NULL
""
0
据我根据文档可以看出,其中之一应该有效:
响应被评估为 JSON 并且对于有效元素必须为 true,并且对于无效元素可以是任何 false、未定义或 null,使用默认消息;
注意,这个问题的答案可能与这个问题有关。
这是修改后的代码:
$registration.find(".username").each(function() {
var $this = $(this);
remote: {
url: "does_user_exist.php",
type: "post",
data: {entityExistence: function(){return $this.val();} },
success: function(data){ console.log(data); }
},
messages: {
remote: "Sorry, that username is not available."
}
});
PHP 脚本总是返回true
或false
正确。根据文档,除此之外的任何内容都true
应该触发错误消息。但是错误信息没有出现。我知道错误消息正在工作,因为还有其他检查工作正常(例如rangelength
,为了清楚起见,从此处的粘贴代码中删除)。