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>
//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));
那么它每秒都在渲染
- Node.js – 让Node.js / Express与Web Audio API一起工作
- 通过variables来expression3条路线
- 节点js表示路由所有path
- 在Win8上安装express.js失败
- 将GETparameter passing给Express + Mongoose Restful API
- 在发送响应之后,如何在Node / Express中结束当前的请求处理?
- 如何在Node.JS中分别接收req.body.model的所有对象而不是它的所有variables?
- 无法使用Node.js和Express捕获POST参数
- 在express-validator v4的检查function中访问请求主体