首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法从jQuery.ajax成功函数返回值

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

Stack Overflow用户
提问于 2012-12-07 13:53:35
回答 3查看 643关注 0票数 1

我想使用jQuery验证器在用户注册时检查服务器是否已经使用了他们想要的用户名。PHP脚本untaken.php完成这项工作,如果用户名可用,则返回ok;如果用户名可用,则返回taken

我的整个源代码在下面,但是问题所在的行是这样的:

代码语言:javascript
运行
复制
return data != "taken";

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

代码语言:javascript
运行
复制
console.log( data != "taken" );

然后在控制台中看到的文本框中输入我想要的truefalse消息。这就是为什么我知道设计本身不是罪魁祸首,只是我不能从jQuery.ajax中的success子句返回任何东西。

代码语言:javascript
运行
复制
$.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中返回某些内容

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-07 16:41:46

事实证明,我想得太多了,可以通过jQuery验证器的内置remote方法轻松地完成这件事。以下是我的代码,如果它对某人有帮助:

验证器脚本中的规则:

代码语言:javascript
运行
复制
remote: "untaken.php"

PHP:

代码语言:javascript
运行
复制
<?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)

票数 1
EN

Stack Overflow用户

发布于 2012-12-07 13:55:57

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

像这样的事情:

代码语言:javascript
运行
复制
echo $result;exit;

然后尝试向success函数中的数据发出警报,并使用

代码语言:javascript
运行
复制
alert(data);return false;
票数 0
EN

Stack Overflow用户

发布于 2012-12-07 14:16:27

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

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13757664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档