0

我有 2 个功能: 1 检查用户是否登录,如果他登录了 - 它需要第二个函数来获取他的用户 ID。现在我只是用警报测试它,看看我是否得到了参数。

这是第一个功能:

//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!");
            $("#divLogin").hide();
            $("#divUserOption").hide();
            $("#divConnectOption").show();
        }
        else {
            alert(getUserID(result));
            $("#divGreeting").html("Hello, "+result+"!");
            $("#divHeader").html("Hello, "+result+"! <a href='javascript:logout()'>Logout</a>");
            $("#divUserOption").html("Hello, "+result+"! <a href='javascript:logout()'>Logout</a>");
            $("#divConnectOption").hide();
            $("#divLogin").hide();
            $("#divUserOption").fadeIn(300);
        }
    });
});

这是第二个函数,应该返回用户 ID:

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

alert一个函数的 是undefined,而第二个函数的 alert 确实有 userID。为什么我不能将它的值返回给第一个函数?为什么我会得到`未定义?

谢谢!`

4

2 回答 2

1

Ajax 是异步的。您不能从中返回值。

正在尝试做的类似于:

function foo() {
    $('button').click(function () { return 1; });
}
var not_one = foo();

在此示例中,在单击按钮之前不会返回该值(foo无论如何它都不是的返回值)。使用 Ajax,在 HTTP 响应到达之前不会返回该值。

您必须在回调函数中处理数据,而不是尝试返回调用函数。

于 2012-04-09T14:12:51.343 回答
0

尝试这个:

//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!");
            $("#divLogin").hide();
            $("#divUserOption").hide();
            $("#divConnectOption").show();
        }
        else {
            getUserID(function(result) {
                $("#divGreeting").html("Hello, "+result+"!");
                $("#divHeader").html("Hello, "+result+"! <a href='javascript:logout()'>Logout</a>");
                $("#divUserOption").html("Hello, "+result+"! <a href='javascript:logout()'>Logout</a>");
                $("#divConnectOption").hide();
                $("#divLogin").hide();
                $("#divUserOption").fadeIn(300);
            });
        }
    });
});

然后是你的 getUserID 函数:

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

编辑

您说您需要在字符串连接上下文中使用用户名:

"Hello "+getUserName()+"!"

但是,如果它必须每次都发出 AJAX 请求,则这是不可能的,除非正在使用阻塞同步调用,这根本不是一个好习惯。如果在页面加载时将用户名存储在变量中,则可以只使用该变量。如果您仍想使用每次使用时都请求它的函数,则必须执行以下操作:

function getUserName(callback) {
    $.getJSON("inc/API.php", {command : "getUserName"}, callback);
}

getUserName(function(result){
    //do username processing here
});
于 2012-04-09T14:29:27.703 回答