我有一个文本框,用户可以在其中开始输入字母。如果数据库中有相关词,它们会出现在dropdown
文本框下方。
为了搜索数据库并返回结果,我使用了 websockets(nodejs 0.10.12 和 javascript)
所以代码是这样的
//something is typed , so call the function, to send data and make query
<input id="typename" type="text" onKeyUp="lookup();" >
//this is where I send data and get back results
function lookup(){
var so=new WebSocket("ws://localhost:1234");
so.onerror=function (evt) {alert('Error');}
so.onopen=function(){
so.send(document.getElementById("typename").value)
}
so.onmessage = function (evt) {
var received_msg = evt.data;
var packet = JSON.parse(received_msg);
so.close();
//feed results to dropdown.....
}
}
这转化为作为用户类型打开和关闭的多个连接。
即使用户从下拉列表中选择了一些东西,连接仍然在后台打开和关闭。因为如果我输入例如 4 个字母,则打开/关闭将为 4。
如果我立即选择我想要的,后台仍然有 2 或 3 个连接,打开和关闭。他们仍然提供结果。这意味着,实际上,不要让我选择我想要的。我必须一遍又一遍地挑选它。(下拉菜单闪烁)如果我编辑它并想将它保存回数据库,我不能,因为仍然有连接在运行,所以我不能打开一个新的来保存它。代码等待...
我该怎么做
<select id="listout" size="5" onChange="so.close();" > </select>
停止在后台运行的连接?以上不起作用。即使我将其设置so
为全局或非全局。不起作用,因为我可以看到多个连接同时打开,但没有关闭。我必须刷新页面,这样它们才能全部关闭。
有什么建议吗?
当下拉列表中的某些内容发生更改(= 用户选择了某些内容)时,如何关闭所有连接?
提前致谢
PS我为巨大的介绍道歉。思想将帮助您更好地理解问题,或提供替代方案