2013-10-31 54 views
0

我有一個文本框,用戶可以開始輸入字母。如果數據庫中有相對詞語,則它們出現在文本框下方的dropdown中。選擇選項時關閉多個websockets連接

要在數據庫中搜索,並帶回結果,我使用WebSockets(0.10.12的NodeJS和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我道歉了巨大的前奏。思維將幫助你更好地理解這個問題,或提供替代

回答

0

要關閉你需要節省他們三分球打開的連接,當你創建它們, 例如:

//global variable for store opened connections 
var aPoolWSConections = [] 

function lookup(){ 
    var so=new WebSocket("ws://localhost:1234"); 
    // 
    // your code here 
    // 
    // at the end 
    aPoolWSConections.push(so); 
}  

實施,將關閉該功能連接。

function closePoolWSConections(){ 
    var iSo = aPoolWSConections.length; 
    while(iSo--){ 
     aPoolWSConections[iSo].close(); 
    } 
    aPoolWSConections = []; 
} 

在必要的時間調用函數。

<select id="listout" size="5" onChange="closePoolWSConections();" > </select> 

但我不會建議你打開你的應用程序的許多連接是足夠的一個websocket連接。

//Create one global WS connection 
var so = new WebSocket("ws://localhost:1234"); 

so.onmessage = function (evt) { 
    var received_msg = evt.data; 
    var packet = JSON.parse(received_msg); 
    //feed results to dropdown..... 
} 

function lookup(){ 
    //maybe should check if it still open 
    so.send(document.getElementById("typename").value); 
} 

//and you can use something like 
<select id="listout" size="5" onChange="so.close();" > </select>