无法从jQuery.ajax成功函数返回值

时间:2012-12-07 05:53:35

标签: javascript jquery jquery-validate

我想使用jQuery Validator在用户注册时检查服务器是否已经使用了所需的用户名。 PHP脚本untaken.php执行此任务,如果用户名可用则返回ok,如果已用,则返回taken

我的完整资料来源如下,但有问题的一行是:

return data != "taken";

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

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

并输入我在控制台truefalse消息中看到的文本框,完全符合我的预期。这就是我知道设计本身不应该受到责备的原因,我只能从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内返回某些内容?

3 个答案:

答案 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/

成功函数应该在您将数据返回服务器后执行您想要执行的任何操作,即:提醒用户注册用户名。

相关问题