socket.on事件每次响应都会重复多次

bib*_*gar 5 sockets jquery node.js

我成功融合后设置了socket.emit事件.但是当我绑定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.
                });
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

这是我的server.js

socket.on('postcomment', function () {
        io.sockets.emit("refresh");
});
Run Code Online (Sandbox Code Playgroud)

我已经验证在我的server.js socket.on函数中只调用了一次.我不知道socket.on('refresh', function () {}在ajax中有什么问题.任何帮助都会很棒.

PS插座连接已经完成.没问题.

编辑:我纠正了这个错误.如果有人将来读这个.正如杰森和尼兰詹提到的那样,socket.on{}事件在成功回应时具有约束力.简单来说:每次调用click处理程序时,它都会向socket添加其他事件侦听器.您在之前点击时附加的听众仍然有效.

所以我对之前的代码进行了以下更改

 $(document).on('click', '#comment_button', function() {
    $.ajax({
        // upon success
        success: function (response) {

            if (response) {
                socket.emit('postcomment');

        }
    });
});

socket.on('refresh', function () {
    console.log('refresh');
});
Run Code Online (Sandbox Code Playgroud)

快乐的编码.

bib*_*gar 4

我对以前的代码进行了以下更改。有效。

$(document).on('click', '#comment_button', function() {
    $.ajax({
        // upon success
        success: function (response) {

            if (response) {
                socket.emit('postcomment');

        }
    });
});

socket.on('refresh', function () {
    console.log('refresh');
});
Run Code Online (Sandbox Code Playgroud)

socket.on{} 事件在成功响应后自行绑定。简单来说:每次调用单击处理程序时,它都会将其他事件侦听器附加到套接字。您在之前的点击中附加的侦听器仍然处于活动状态。