【问题标题】:This won't print outside of the function? [duplicate]这不会在函数之外打印? [复制]
【发布时间】:2016-05-08 14:29:08
【问题描述】:
function getUsername() {
    $.get("http://www.roblox.com/mobileapi/userinfo", function(data) {
        return data.UserName;
    });
}

console.log(getUsername());

它说“未定义”,但每当我手动访问该链接时,它就会显示

{"UserID":74798521,"UserName":"AbstractMadness","RobuxBalance":7024,"TicketsBalance":21530,"ThumbnailUrl":"http://t2.rbxcdn.com/c189198f6c0689ce004d9438c70eb1bb","IsAnyBuildersClubMember":true}

如果我在函数内部执行 console.log(data.UserName),它也会记录名称。

【问题讨论】:

  • $.get 是异步的。当您调用console.log(getUsername()); 时,它不知道要输出什么。
  • $.get 是一个异步函数调用。那意味着它不能返回一个值。您可以将返回值设置为全局变量,也可以触发事件。
  • 您的 return 语句在匿名回调函数中,而不是从您的 getUserName() 函数返回值。
  • 我认为这是因为所有 AJAX 调用现在都是异步的。因此,您需要在返回正确答案时使用回调。我认为这是 .done() 函数,但我想不起来。

标签: javascript jquery roblox


【解决方案1】:

它不是同步的。您正在打印该函数的返回,该函数不返回任何内容(因此未定义)。即使您要返回$.get 电话,您也不会得到您想要的东西。您需要在回调函数内部登录或使用承诺。

function getUsername() {
    return $.get("http://www.roblox.com/mobileapi/userinfo", function(data) {
        console.log(data.UserName);
        return data.UserName;
    });
}

getUsername().done(function(username) { console.log(username); });

【讨论】:

    【解决方案2】:

    函数getUsername 执行$.getrequest,但它什么也不返回,并到此结束。

    您必须在异步$.get 请求的函数中记录您的数据。此函数 (function(data)) 是一个回调函数。如果您的$.get 请求的响应到达,它将被调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 2022-11-26
      • 2019-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多