2016-11-04 97 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)我沒有激發'新用戶'事件,因此'用戶名'事件沒有觸發。

相關問題