2012-04-28 4 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

Смежные вопросы