javascript函数返回不起作用

时间:2009-11-13 23:09:51

标签: javascript function return

我在函数中返回变量时遇到问题,下面的脚本运行正常:

function sessionStatus(){
    $(document).ready(function(){
        $.getJSON(scriptRoot+"sessionStatus.php",function(status){
            alert(status);
        });
    });
}

sessionStatus();

当我尝试以下操作时,我会收到一个消息框,其中包含“未定义”消息:

function sessionStatus(){
    $(document).ready(function(){
        $.getJSON(scriptRoot+"sessionStatus.php",function(status){
            return status;
        });
    });
}
alert(sessionStatus());

这真让我烦恼,我似乎无法看清楚我做错了什么。

7 个答案:

答案 0 :(得分:12)

你应该知道两件事:

1:JSON事物是异步的,因此在仍然提取JSON时,已经可以完成对sessionStatus的函数调用。以下方法可行:

function sessionStatus(callback){
    $(document).ready(function(){
        $.getJSON(scriptRoot + "sessionStatus.php", function(status){
                callback(status);
        });
    });
}
sessionStatus(function(s){alert(s);});

或者更确切地说:

function sessionStatus(callback){
    $(document).ready(function(){
        $.getJSON(scriptRoot + "sessionStatus.php", callback);
    });
}
sessionStatus(function(s){alert(s);});

2:即使它是同步的,你只是从内部函数给出一个返回值,所以sessionStatus什么都不返回。查看此代码(与您的JSON事物无关):

function do() {
    var x = 0;
    (function(){
       x = 2;
    })();
    return x;
}

或:

function do() {
    var x = (function(){
       return 2;
    })();
    return x;
}

两者都返回2.希望这有点解释。

答案 1 :(得分:2)

您的函数sessionStatus()不会返回任何内容,因此警告显示undefined

一旦页面加载,所有函数都会为AJAX调用设置好事项 - sessionStatus()

在对服务器的AJAX调用返回值之前,function(status) { ...}中的代码不会运行,并且在页面加载之前不会发送该AJAX调用。

你应该仔细阅读$.getJSON()$(document).ready()实际做的事情,因为在你正确理解它们之前,你会继续得到令人困惑的行为。

答案 2 :(得分:1)

您的sessionStatus()函数永远不会返回任何内容。它设置一个稍后运行的函数, 函数返回一些东西,但这与sessionStatus()没有任何关系

答案 3 :(得分:1)

文档就绪事件完成后,您将返回一个值。你应该去哪里? jQuery对象不知道如何处理它。

答案 4 :(得分:1)

函数sessionStatus只为$(document).ready()设置事件监听器,然后返回而不返回值。那是你看到的未定义。

稍后当$(document).ready()触发时会调用ajax,如果成功则返回状态,但没有任何东西正在接收该状态。

答案 5 :(得分:1)

function sessionStatusCallback(status)
{
    alert(status);
}

function sessionStatus(){
    $(document).ready(function(){
        $.getJSON(scriptRoot+"sessionStatus.php",function(status){
                sessionStatusCallback(status);
        });
    });
}

sessionStatus();

您的函数是异步调用的 - 实际上是在通过.ready()和.getJSON()进行两次异步调用之后。在这种情况下,没有可用的返回值,而是必须使用回调,如上所述,来处理响应。

虽然我应该注意在上面已经传递给getJSON的函数是回调。您可以将该函数定义更改为“sessionStatusCallback”,并且一旦JSON准备好就会调用上面的回调,并且您可以继续在那里处理。或者......在当前回调中继续处理(无论是使用函数引用还是在.getJSON()调用中声明匿名函数,都是一种风格问题)

答案 6 :(得分:0)

函数永远不应该包含在jQuery(document).ready函数中。将它们分开,这样就不会产生你不想要的副作用。你想如何调用会话状态?巫婆的功能应该得到回报值吗?