1

当用户注册时,我想使用 jQuery Validator 来检查服务器是否已经使用了他们想要的用户名。PHP 脚本untaken.php完成这项工作,返回ok用户名是否可用,或者taken是否被使用。

我的整个来源如下,但是有问题的行是这样的:

return data != "taken";

目前永久显示“用户名已被占用”消息。但是,如果我将其更改为:

console.log( data != "taken" );

并输入我在控制台中看到的文本框truefalse我期望的消息。这就是我知道设计本身不应该受到责备的原因,只是我无法从successjQuery.ajax 中的子句返回任何内容。

$.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

4

3 回答 3

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

于 2012-12-07T08:41:46.073 回答
0

要将数据返回给ajax函数,您需要在untaken.php页面中打印或回显结果。

像:

echo $result;exit;

然后尝试提醒success函数内部的数据并调试结果

alert(data);return false;
于 2012-12-07T05:55:57.093 回答
0

您为成功操作定义的函数是回调。

当您进行 ajax 调用时,它是异步完成的,(意味着脚本在浏览器连接到服务器时继续执行。在处理回调时不能使用 return,因为它们稍后执行,而不是作为典型函数立即执行。

这可能更有意义:http ://recurial.com/programming/understanding-callback-functions-in-javascript/

在您将数据返回服务器后,成功函数应该执行您希望发生的任何操作,即:提醒用户用户名已被使用。

于 2012-12-07T06:16:27.017 回答