繁体   English   中英

javascript函数返回不起作用

[英]javascript function return not working

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

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());

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

你应该知道两件事:

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.希望这可以解释一下。

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

一旦页面加载,所有函数都会为AJAX调用设置 - sessionStatus()中实际上不会发生任何可以返回的事件。

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

你应该阅读$.getJSON()$(document).ready()实际上做了什么,因为在你正确理解它们之前,你将继续得到令人困惑的行为。

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

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

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

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

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()调用中声明匿名函数,都是样式问题)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM