我得到了一个包含项目表的母版页,成功后表数据将不断刷新socket.io
与服务器的连接。
单击表中的某个项目(该项目的 id 将传递到服务器)时,将使用 ajax 加载子视图,并通过侦听来自服务器的事件不断刷新该子视图。
现在的问题是,通过选择表中的另一个项目,子视图正在监听多次(即使我在成功的ajax操作后清除了子视图(HTML))。例如,如果您选择 10 个项目,它会监听 10 次,并且看不到子视图中发生的情况(所有内容都闪烁得非常快)。
应用程序.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>