在JS中使用几个函数和回调

时间:2012-04-12 19:42:06

标签: javascript jquery ajax callback

我有这个代码加载到document.ready上,它检查用户是否登录:

//Checking if the user is logged in or not
$(function(){
$.getJSON("inc/API.php", {command : "getUserName"},
    function(result){
        if(result==null){
            $("#divGreeting").html("Hello, guest!");
        }
        else {
            $("#divGreeting").html("Hello, "+result+"!");
            $("#divHeader").html("Hello, "+result+"! <a href='javascript:logout()'>Logout</a>");
        }
    });

});

如果他不是 - 它说“你好,客人”;如果他是 - 它说“Hello, username ”,其中username是此函数中的result。我需要的是在这部分中创建用户名:$("#divGreeting").html("Hello, "+result+"!");是一个链接,它导致另一个带有userID的页面,我没有。像这样:$("#divGreeting").html("Hello, <a href='userpage.html?userid="+HAVE TO GET THE ID HERE+"'>"+result+"</a>!");

我尝试使用此功能(确实得到了:

function getUserID(){
    $.getJSON("inc/API.php",
    {
        command : "getUserID"
    },
    function(result){
        return result;
    });
}

并称之为:$("#divGreeting").html("Hello, <a href='userpage.html?userid="+getUserID()+"'>"+result+"</a>!");,但是没有用,我没有得到任何结果,除了undefined(我知道它与异步AJAX有关)

这是API.php的内容:

case "getUserID":
    echo getUserID();
    break;

它从文件BusinessLogic.php调用函数getUserID(),它具有以下功能:

function getUserID()
{
$arr = select("SELECT userID FROM users WHERE username='".$_SESSION["username"]."'");
return $arr[0]["userID"];
}

我被告知我必须使用回调,但我不知道该怎么做,如何编写这个回调。我迷失在这里......

请帮忙吗?

4 个答案:

答案 0 :(得分:1)

$.getJSON("inc/API.php", {command : "getUserID"}, function(result){
    var id = result;
    $.getJSON("inc/API.php", {command : "getUserName"}, function(result){
         $("#divGreeting").html("Hello, "+result+"!");
         $("#divHeader").html("Hello, <a href='userpage.html?userid="+id+"'>"+result+"</a>!");
    });
});

答案 1 :(得分:0)

使用您的ajax响应的代码

$("#divGreeting").html("Hello, <a href='userpage.html?userid="+getUserID()+"'>"+result+"</a>!");

必须在ajax函数的回调中。

答案 2 :(得分:0)

AJAX查询不会阻止函数的执行,所以当你调用getUserID时,它会初始化AJAX调用并返回undefined,因为没有设置return。像建议的那样添加返回也不会起作用,因为你要做的就是返回别的东西,jQuery可能。

您必须在生成任何内容之前获取ID。因此,当你要求输入用户名并且你得到一个用户名而不是直接显示东西时,你会进行AJAX调用以获取id,然后回调那个渲染你的HTML。

答案 3 :(得分:0)

您已经在使用回调。

$ .getJSON语法为:

jQuery.getJSON( url [, data] [callback] )
  • 您的代码中有5个{括号,但只有4个}括号。也许 这是错误吗?
  • 如果打字,你会看到什么? 您的浏览器中有yourdomain.com/INC/API.php?command=getUserName个?如果 该文档为空,错误在您的PHP文件中,如果出现用户名,则问题出在您的jQuery代码中。
  • 您没有告诉我们如果您执行javascript代码会发生什么。出现了什么? “Hello username”,“Hello guest”或什么都没有?