【发布时间】:2016-01-13 21:38:15
【问题描述】:
我已经设置了 socket.emit 成功 cooment 事件。但是当我绑定 sockets.on 事件时会出现问题。它被多次触发。
$(document).on('click', '#comment_button', function() {
$.ajax({
// upon success
success: function (response) {
if (response) {
socket.emit('postcomment');
socket.on('refresh', function () {
console.log('refresh');
//This console.log('refresh') is coming multiple times. I mean its occurance increases with every successful ajax response.
});
}
});
});
这是我的 server.js
socket.on('postcomment', function () {
io.sockets.emit("refresh");
});
我已经验证在我的 server.js 中 socket.on 函数只被调用了一次。
我不确定 ajax 中的 socket.on('refresh', function () {} 有什么问题。
任何帮助都会很棒。
P.S 套接字连接已经建立。没问题。
编辑:我纠正了错误。如果将来有人读到这个。 正如 jason 和 Niranjan 所提到的,
socket.on{}事件在成功响应后绑定了自己。 简单地说: 每次调用单击处理程序时,它都会将其他事件侦听器附加到套接字。您在之前的点击中附加的侦听器仍然处于活动状态。
所以我对之前的代码做了以下更改
$(document).on('click', '#comment_button', function() {
$.ajax({
// upon success
success: function (response) {
if (response) {
socket.emit('postcomment');
}
});
});
socket.on('refresh', function () {
console.log('refresh');
});
编码愉快。
【问题讨论】:
-
您是否将函数的多个副本绑定到
socket.onrefresh事件? -
你什么时候调用ajax函数??
-
不只有console.log('refresh');
-
没有响应兄弟,如果你调用ajax 20次,你的socket会重复20次。
-
我的意思是我认为这就是正在发生的事情......每次
ajax调用成功时,它都会绑定一个新的匿名函数副本。