gpt4 book ai didi

javascript - Node.js Socket.io mysql 返回重复项

转载 作者:行者123 更新时间:2023-11-29 11:42:45 24 4
gpt4 key购买 nike

我在使用 socket.io 时遇到了这个问题。每当用户单击链接时,它就会转到 mysql,提取数据并将其传回客户端。我发现当我点击链接n次时,我得到了n个重复项。如果我单击该链接 3 次,则返回的数组将重复 3 次。这是我的客户端、服务器端的问题,还是方法本身都是错误的?

客户端:

 $(document).on("click", "#view_conv", function(event){
event.preventDefault();
var data = $("#view_conv").data('id');
socket.emit("viewing_conv_get_messages", data, uname);
$("#close_observ_window").show();
socket.on("show_message", function(htmldata){
$("#obvs_content").append(htmldata);
});
});
$("#close_observ_window").click(function(event){
event.preventDefault();
$("#obvs_content").empty();
});

服务器端:

client.query("SELECT id FROM conversations WHERE user_one = ? AND user_two = ? AND active = ?", [name_one, name_two, 1],
function selectCb(err, results){
if(err){ throw err; }
if(results.length > 0){
var convId = "";
var str = "";
for(var i = 0; i < results.length; i++){
convId = str + results[i].id;
}
client.query("SELECT `message`,`sender` FROM chat_messages WHERE conv_id = ? ORDER BY(id) DESC", convId,
function selectCb(err, res){
if(err){ throw err; }
else {
if(res.length > 0){
for(var j=0; j<res.length; j++){
var string_m = '';
var string_send = '';
var message = string_m + res[j].message;
var sender = string_send + res[j].sender;
content = "<b>" + sender + "</b> : " + message + " <br>";
users[users[users.indexOf(admin)]].emit("show_message", content);
console.log(j);
}
}
// recurse_messages(res, admin, 0);
}

});
}
});

最佳答案

将你的socket.on写在click函数之外。

使用当前代码,每次单击#view_conv时都会添加一个监听器。因此,当您点击 3 次时,show_message 事件将会有 3 个监听器。

尝试像这样修改代码

客户端:

$(document).on("click", "#view_conv", function(event){
event.preventDefault();
var data = $("#view_conv").data('id');
socket.emit("viewing_conv_get_messages", data, uname);
$("#close_observ_window").show();
});

socket.on("show_message", function(htmldata){
$("#obvs_content").append(htmldata);
});

$("#close_observ_window").click(function(event){
event.preventDefault();
$("#obvs_content").empty();
});

您应该始终尝试独立编写监听器(即在所有函数之外)

关于javascript - Node.js Socket.io mysql 返回重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35492128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com