2016-11-04 78 views
0

我有一个事件我试图触发,这就是所谓'用户名'。 我在Node.js中使用Socket.IO库。所以,我有2个文件,index.html,然后server.js:为什么当我使用套接字发射时事件不会触发?

我试图发出在客户端中的index.html的事件是:

//show online users 
    socket.on('usernames', function (data) { 
     console.log('@@@@@@@@@@@@@@@@@@@@@'); 
     var html = ''; 
     for (var i = 0; i < data.length() ; i++) { 
      html += data[i] + '<br/>'; 
     } 

     $users.html(html); 
    }); 

了,emit是在服务器侧server.js:

io.sockets.on('connection', function (socket) { 
    //new user join 
    socket.on('new user', function (data, callback) { 
     if (nicknames.indexOf(data) != -1) { //if name dont exist .indexOf() returns -1 
      callback(false); 
     } else { 
      callback(true); 
      socket.nickname = data; 
      nicknames.push(socket.nickname); 
      io.sockets.emit('usernames', nicknames); 
     } 
    }); 
    // sent message from user 
    socket.on('send message', function (data) { 
     //send the data to all users 
     io.sockets.emit('new message', data); 
    }); 
    // 
}); 

** index.html中的事件是内部$(文件)。就绪();

什么也没有发生,事件不会触发。

帮助?

+0

您不应在事件名称中使用空格。事件是否被称为“新用户”?如果不是,你永远不会发出“用户名” – Molda

+0

其实它适用于空间,也许这不是最好的做法,但它绝对有效。 –

+0

当触发一个名为'用户名'的发射时,会触发一个事件。我可以在您的服务器端代码中看到您正在发生名为'用户名'的事件,名为'新用户'的事件中。新用户是否在其他地方被调用?如果不是,那将是一个开始的好地方。此外,我在您的服务器上看到您将每个用户名都推送到一个昵称数组中,但昵称数组不在此代码段中,除非您只是没有将此作为此示例的一部分 – Jackthomson

回答

0

回答我自己的问题。 有2个错误: 1)语句'data.length()'没有编译,正确的方法是使用'data.length'。 2)我没有激发'新用户'事件,因此'用户名'事件没有触发。

相关问题