我想使用jQuery Validator在用户注册时检查服务器是否已经使用了所需的用户名。 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
内返回某些内容?
答案 0 :(得分:1)
原来我是在思考整个事情,可以使用jQuery Validator的内置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
像打印“真实”或“虚假”一样简单。注意它使用GET(即URL参数)而不是POST,而GET变量是它正在验证的字段的name
(在我的情况下是newuser
)
答案 1 :(得分:0)
要将数据返回到ajax
功能,您需要在untaken.php
页面中打印或回显结果。
soemething like:
echo $result;exit;
然后尝试提醒success
函数内的数据
并使用
alert(data);return false;
答案 2 :(得分:0)
您为成功操作定义的功能是回调。
当您进行ajax调用时,它是异步完成的(意味着脚本在浏览器连接到服务器时继续执行。在处理回调时不能使用return,因为它们稍后执行,而不是立即执行典型的功能。
这可能更有意义:http://recurial.com/programming/understanding-callback-functions-in-javascript/
成功函数应该在您将数据返回服务器后执行您想要执行的任何操作,即:提醒用户注册用户名。