socket.on调用回调函数过多

4

在第一次点击时,我的客户端会输出以下内容:

Object {hello: "world"} 

然后在第二次点击时:
Object {hello: "world"}
Object {hello: "world"} 

每次单击时,该行输出的次数会随后续单击而增加一次。

客户端

var socket = io.connect('http://localhost');

$(document).on('click' , '#test', function(){
    socket.emit('news', { my: 'data' });
    socket.on('news', function (data) {
        console.log(data);
    });
});

服务器

var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')

io.sockets.on('connection', function (socket) {
socket.on('news', function (data) {
    socket.emit('news', { hello: 'world' });
    console.log(data);
});
});
1个回答

4

每次触发点击事件处理程序时,您都会绑定一个新的事件处理程序。在回调外部绑定它一次:

var socket = io.connect('http://localhost');

socket.on('news', function(data) {
    console.log(data);
});

$(document).on('click', '#test', function() {
    socket.emit('news', {
        my: 'data'
    });
});

如果我需要在我的函数中使用Socket,但是我有变量怎么办?例子:$(document).on('click' , '#test', function(){var id = $(this).id; //// 然后我在Socket中使用这个ID socket.emit('news', { my: 'data', myId : id }); socket.on('news', function (data) { console.log(data); });});从服务器创建回调? - bORm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接