我想使用jQuery验证器在用户注册时检查服务器是否已经使用了他们想要的用户名。PHP脚本untaken.php
完成这项工作,如果用户名可用,则返回ok
;如果用户名可用,则返回taken
。
我的整个源代码在下面,但是问题所在的行是这样的:
return data != "taken";
当前将永久显示“用户名已被占用”的消息。但是,如果我将其更改为:
console.log( data != "taken" );
然后在控制台中看到的文本框中输入我想要的true
和false
消息。这就是为什么我知道设计本身不是罪魁祸首,只是我不能从jQuery.ajax中的success
子句返回任何东西。
$.validator.addMethod("userCannotBeTaken", function(value, element){
var check;
check = $.ajax({
type: "GET",
url: "untaken.php",
data: ({ "user" : value }),
dataType: "text",
success: function(data){
return data != "taken"; //return false if taken or true if not, based on response
}
});
}, "Username already taken");
如何从jQuery.ajax
中返回某些内容
发布于 2012-12-07 16:41:46
事实证明,我想得太多了,可以通过jQuery验证器的内置remote
方法轻松地完成这件事。以下是我的代码,如果它对某人有帮助:
验证器脚本中的规则:
remote: "untaken.php"
PHP:
<?php
//mysql info
[snip]
//connect to database
$sql = new mysqli($mysql_host, $mysql_user, $mysql_password, $mysql_database);
//Populate variable
$newun = $sql->real_escape_string( $_GET['newuser'] );
//Do the actual checks
$un_already_taken = $sql->query("
SELECT username FROM logins WHERE username = '$newun'
"); //check if UN already in DB
if($un_already_taken->num_rows > 0) //un taken already
print "false"; //tell jQuery to not submit form
else
print "true"; //tell jQuery all is good
就像打印"true“或"false”一样简单。请注意,它使用GET (即name
参数)不是POST,GET变量是它正在验证的字段的URL (在我的例子中是newuser
)
发布于 2012-12-07 13:55:57
要将数据返回给ajax
函数,需要在untaken.php
页面中打印或回显结果。
像这样的事情:
echo $result;exit;
然后尝试向success
函数中的数据发出警报,并使用
alert(data);return false;
发布于 2012-12-07 14:16:27
您为成功操作定义的函数是一个回调。
当您进行ajax调用时,它是异步完成的(这意味着当浏览器连接到服务器时,脚本将继续执行。在处理回调时不能使用return,因为它们是稍后执行的,而不是像典型的函数那样立即执行。
这可能更有意义:http://recurial.com/programming/understanding-callback-functions-in-javascript/
成功函数应该在您将数据返回到服务器之后执行您希望发生的任何操作,即:警告用户用户名已被窃取。
https://stackoverflow.com/questions/13757664
复制相似问题