0

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

4

1 に答える 1