2012-04-28 39 views
1

前もって、私はJavascript、node.js、socket.ioの新人です。それはこれまでかなり驚いています。 :)クライアントデータがサーバーに渡されていません

私は現在、簡単なユーザー名インターフェイスを作成しようとしています。クライアントは自分のユーザ名を入力し、ボタンをクリックすると、ユーザ名をサーバに送信して配列に入れるイベントが発生します。

クライアントが正常に接続され、ハンドシェイクが発生します。それでもソケットはサーバーにデータを送信していません。

サーバー:

var io = require('socket.io').listen(8888); 
var players = []; 

io.sockets.on('connection', function (socket) { 
socket.on('adduser', function(username) { 
    players.push(username); 
    console.log("Received: " + username); 
    }); 
}); 

クライアント:助けを

var socket = io.connect('/socket.io/socket.io.js'); 
function usernameSubmit(){ 
console.log("Button pressed"); 
var textfield = document.getElementById('usernamefield'); 
var username = textfield.value 
if (username != ""){ 
    console.log(username); 
    socket.send('adduser', username); 
    console.log("Username submitted."); 
} 
else 
    console.log("Blank username detected."); 
} 

ありがとう!

答えて

1

代わりに.emitを使用してください。そうすれば、オブジェクトを渡してサーバー上でアクセスできます。

クライアント:

if (username != ""){ 
    console.log(username); 
    socket.emit('adduser', { username: username }); 
    console.log("Username submitted."); 
} 

サーバー:

socket.on('adduser', function(data) { 
    players.push(data.username); 
    console.log("Received: " + data.username); 
}); 
+0

ないかなり。 'send'は普通の古いウェブソケットと似ています。イベント名を指定することはできません。代わりに' message'イベントを発生させます。あなたは正しいですが、 'emit'は' adduser'のような名前付きイベントに使うべきものです。文字列、オブジェクト、またはAFAIKの両方を使用して関数を呼び出すことができます。 –

+0

奇妙なことに、まだサーバーが何も受信していないようです。 – iColor

+0

(私はクライアント側で確認できますが、ユーザー名はうまくいきます) – iColor

関連する問題