我真的试图避免问这个问题。关于这个插件,我已经看过很多关于SO的帖子,但他们仍然没有得到它。现在我有一个新的帐户注册表单,我正在尝试编写一个自定义方法来验证唯一的用户名。我想以下应该有效:
$.validator.addMethod(
"uniqueUsername",
function(value, element) {
$.post(
"http://" + location.host + "/scripts/ajax/check_username.php",
{
username: value
},
function(response) {
if(response == 'true') {
return true;
} else {
return false;
}
}
);
},
"This username is already taken."
);
不幸的是,无论回调函数如何,插件都会继续运行。我发现有人建议做类似以下的事情:
var result = false;
$.validator.addMethod(
"uniqueUsername",
function(value, element) {
$.post(
"http://" + location.host + "/scripts/ajax/check_username.php",
{
username: value
},
function(response) {
if(response == 'true') {
result = true;
} else {
result = false;
}
}
);
return result;
},
"This username is already taken."
);
但它似乎有一个延迟,因为它存储了值,然后在下一个事件将设置任何值。你们推荐什么?
答案 0 :(得分:2)
由于这是一个异步检查,它周围需要更多(你不能从这样的函数返回一个值,在你的情况下它总是假的)。内置方法是remote
,使用方式如下:
$("form").validate({
rules: {
username: {
remote: {
url: "http://" + location.host + "/scripts/ajax/check_username.php",
type: "post"
}
}
}
});
这将POST username: valueofElement
,因为规则是针对名为username
的元素。如果验证通过,您的服务器端脚本应返回true
,否则false
如果用户名已被false
,则返回{{1}}。
You can read more about the remote
option here,包括如何在需要时传递其他数据参数。
答案 1 :(得分:-1)
js code
username: {
required: true,
minlength: 5,
remote: '/userExists'
},
用于检查是否存在的Php代码并返回消息
public function userExists()
{
$user = User::all()->lists('username');
if (in_array(Input::get('username'), $user)) {
return Response::json(Input::get('username').' is already taken');
} else {
return Response::json(Input::get('username').' Username is available');
}
}