【问题标题】:Javascript Function and show global vars [duplicate]Javascript函数并显示全局变量[重复]
【发布时间】:2015-07-10 00:19:30
【问题描述】:

我尝试这样做:

<script>
    FB.getLoginStatus(function(response) {  
        if (response.status==='connected') {
            var fb_status="on";
        } else {
            var fb_status="off";    
        }
    });

    alert("ok"+fb_status);

</script>

如果我将警报放在函数内部,则此警报有效,另一方面,如果我将此警报放在外部,则无效

我认为这与 php 中的全局变量或多或少相同,但在 Javascript 方面没有太多经验

我只需要我在示例中放入的相同内容,以便在 var 中检测函数的结果,但就像我作为示例中的示例一样,在函数之外,我尝试了很多事情但没有得到结果

感谢您对社区的帮助

【问题讨论】:

  • 在块外声明 fb_status 变量,并在块内分配所需的“on”和“Off”。
  • 您正在订购比萨饼,然后在送达前尝试吃掉它!
  • 我没有尝试........ :(
  • 这种情况下,U可以使用回调函数。请试试这个链接,它回答了你的问题,stackoverflow.com/questions/7522947/…

标签: javascript jquery facebook-javascript-sdk


【解决方案1】:

FB.getLoginStatus 是异步函数,因此当您尝试在其中获取 fb_status 时,您会得到 undefined,因为 FB.getLoginStatus 尚未返回任何结果

【讨论】:

  • 是的,这就是它失败的原因,但问题的答案是什么?
  • 是的,我真的需要得到这个外部函数的结果,有了这个我可以运行其他函数,但在这种情况下没有经验......
  • @Miguel Garcia:由于时间问题,您不能只使用全局变量。你需要重构你的代码,。你能展示你的例子的其余部分吗?
【解决方案2】:

由于FB.getLoginStatus 调用是异步的,结果只会在稍后发生,并且只与事件处理程序内部相关:

例如

<script>
    FB.getLoginStatus(function(response) 
    {   
        // This line gets called many millisconds later
        console.log("When I have a status");
        if (response.status==='connected') 
        {
           var fb_status="on";
        }
        else
        {
            var fb_status="off";    
         }
         alert("ok"+fb_status);
    });
    // This line executes long before the callback returns
    console.log("After call");
</script>

查看控制台查看事件顺序:

  • "After call"
  • "When I have a status"

您在 cmets 中提到您想在其他地方使用该值。问题在于时间,因为您想要的结果只会在以后发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    相关资源
    最近更新 更多