【问题标题】:why is socket.id undefined in the browser为什么浏览器中未定义socket.id
【发布时间】:2015-11-12 09:22:44
【问题描述】:

如果我执行 console.log(socket),我会在 firebug 中得到一个套接字对象。在 obj 中,我可以看到带有 id 的属性,并且可以看到 id 的值。但是当我做 console.log(socket.id) 我得到未定义的。为什么?

   var socket = io();
    $(document).ready( function(){
        console.log(socket);
        console.log(socket.id);
        console.log(socket.ids);
        $(".click").on("click", function(e){
            alert("clicked")
            socket.emit("clicked", socket.id)
            $(this).addClass("removeclick");
        })
     });

ps 我可以得到socket.ids,它是 0 但不是 socket.id。

【问题讨论】:

  • 当我在 firebug 中执行 console.log() 时,它按预期工作。你试过吗?
  • 另外,尝试将您的代码更改为console.log(JSON.stringify(socket)),我想您会明白发生了什么。
  • for console.log(JSON.stringify(socket)) 我得到 TypeError: cyclic object value。这是我应该看到的吗?
  • 嗯。好的。所以它不可字符串化。当调用console.log() 时,您应该看到套接字对象尚未连接。但是您可以看到已连接的套接字对象的原因是控制台显示了该对象的实时引用,因此您看到的实际上是 socket 的未来版本
  • 为了向自己证明这一点,请在 setTimeout() 中打印 socket.id

标签: javascript node.js express socket.io


【解决方案1】:

设置端口Lister并通过匿名函数'http://localhost:8000'获取id

this.socket = io('http://localhost:8000');
    this.socket.on('connect' , () => {
      console.log(this.socket.id);
    });

【讨论】:

    【解决方案2】:

    Socket.io 需要一些时间来建立连接。我发现在客户端获取 ID 的最佳方法是:

    socket.on('connect', () => {console.log(socket.id)});
    

    'connect' 是连接就绪时发出的系统事件。

    (我当前的socket.io版本是1.7.2)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      • 2014-03-24
      • 1970-01-01
      • 2017-06-16
      • 2010-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多