【问题标题】:JS data becomes undefined after post. (node, socket.io, express)JS 数据在发布后变得未定义。 (节点,socket.io,快递)
【发布时间】:2013-12-20 21:47:15
【问题描述】:

我几天前才开始编码,所以我的术语可能有点不对,但这里是。

所以我的 app.js 文件中有一个对象 var users = {};。在我的客户端代码中,我有一个函数,它从输入字段中获取 $nickBoxVal() 并将其作为(数据)在客户端和服务器端作为(数据)传递。

所以我在客户端有这样的东西:

$nickForm.submit(function(e) {
  e.preventDefault;
    socket.emit('new user', $nickBox.val(), function(data) {
      //stuff
    });
      $nickBox.val('');
});

在服务器上:

socket.on('new user', function(data, callback) {
  if (data in users) {
    callback(false);
  } else {
    callback(true);
    socket.nickname = data;
    users[socket.nickname] = socket;
    updateNicknames();
  }
});

function updateNicknames() {
  io.sockets.emit('usernames', Object.keys(users)); 
}

现在,当我转到下一页时,(数据)变得未定义。我做了很多研究,似乎我的代码在需要同步时是异步的。我找到的所有指南都告诉我在函数外部声明未定义的 var,以便它是一个全局变量,但我的(数据)不是 var(据我所知)而且我没有自己定义它。 (data) 是用户 {} 对象的属性。

那么我该如何解决这个问题?

【问题讨论】:

    标签: javascript node.js sockets


    【解决方案1】:

    “data”是回调函数的参数。它仅在该函数内的范围内。其他功能不能参考。调用回调函数时,“数据”取不同的值;在函数外引用参数是没有意义的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-21
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 2023-03-23
      相关资源
      最近更新 更多