socket.io客户端在刷新后多次听相同的事件

我有一个包含项目表的母版页,并且在与服务器成功的socket.io连接之后,表数据将不断刷新。

当单击表中的项目(项目的id将被传递给服务器)时,子视图将使用ajax加载,并且将通过监听来自服务器的事件而不断刷新。

现在的问题是,通过select表中的另一个项目,子视图正在多次监听(即使在成功执行ajax操作后清除了子视图(HTML))。 例如,如果select10个项目,则会侦听10次,并且无法查看子视图中发生的情况(所有内容都非常快速地闪烁)。

app.js(nodejs)

 io.on('connection', function (socket) { console.log('Client Connected...' + clients[socket.id]); // updates master page table. socket.emit('data', self.StatusObject(self.allModules)); socket.on('close', function (err, res) { console.log('Client disconnected...' + err + ' ' + res); }); //updates child view. socket.on('childData', function (id) { var data = self.FindModule(id); statusPacketTimer = setInterval(function () { socket.emit('publishChildData', self.StatusPacket(id)); }, 1000); }); }); 

masterpage.html(html&jquery

 <table> <tr onclick="getContent(${id})"> <td>row_id</td> <td>status</td> </tr> </table> <script> socket.on('data', function (message) { $('#mainTable').find('tr:gt(0)').remove(); updateTable(message); }); function getContent(id) { if (id){ $.ajax({ async: true, type: 'get', cache: false, url: 'getContext', data: { 'id': id }, success: function (data, status, moduleData) { if (status == 'success') { $('#content').html('').html(data); } } }); } } </script> 

childpage.html(html&jquery)

 <div id="content"></div> <script> socket.emit('childData', $('#id').val()); socket.on('publishChildData', function (data) { // replace the data in div with new data }) </script> 

Solutions Collecting From Web of "socket.io客户端在刷新后多次听相同的事件"

 //updates child view. socket.on('childData', function (id) { var data = self.FindModule(id); statusPacketTimer = setInterval(function () { socket.emit('moduleData', self.LocateStatusPacket(id)); }, 1000); }); 

在这个代码中, setInterval连续的。 如果子视图呈现通过socket.emit('moduleData', self.LocateStatusPacket(id));触发socket.emit('moduleData', self.LocateStatusPacket(id));

那么它每秒都在渲染