ユーザーが文字の入力を開始できるテキストボックスがあります。データベースに関連語がある場合は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 巨大なイントロをお詫びします。思考は、問題をよりよく理解するのに役立ち、または代替案を提供します