2010-12-09 61 views
0

我一直在研究一個Windows小工具(意思是「瀏覽器」是Internet Explorer),它查詢指定的子網地址以獲取信息。現在,它有時會以相對較快的速度(大約每5秒)完成一次,並且運行得很好。但是,有時它會陷入就緒狀態1,並會永遠停留在那裏。每當小工具嘗試重新獲取xmlhttprequest函數並從中獲取信息時,它都將保持在狀態1.在打開小工具的多個實例並關閉其中一個實例時,這很容易複製。那時候,那個仍然開着的那個幾乎總是會陷入這種狀態。我覺得這可能與他們訪問同一網站有關,或者它可能與xmlhttprequests在傳輸中止並阻止其他人工作有關。以下是相關的代碼。Javascript:xmlhttprequest隨機卡在Ready狀態1

​​

回答

1

那麼它看起來像我想出來的。我有一種感覺,這是一個未解決的請求,因爲它只發生在它的實例被關閉時(意味着如果其中一個在與服務器通信時關閉,它將永遠保持通信並且沒有其他人可以訪問服務器)並且情況似乎是這樣。我在多個領域對代碼進行了一些修改,基本上它是什麼時候小工具關閉它確保中止所有的請求。這些請求現在是實例變量(以允許中止它們),但是每次需要時它們仍然是新的。

+1

你怎麼覺得張貼修改,使這個值得的答案嗎? – 2013-07-11 17:15:25

0

對於那些偶然發現並需要一個具體的代碼示例的人,在這裏你去。

我有同樣的問題,解決方案是重新使用XMLHttpRequest對象,以確保任何先前的請求在啓動一個新的請求之前被取消。如果你想有多個AJAX請求,但在我的情況下觸發一個新的請求意味着不再需要最後一個請求,這將不起作用。

我的頁面上的所有請求都是通過看起來像這樣的XMLHttpRequest包裝器方法進行的;

//Declare the XMLHttpRequest object to be re-used 
var global_xHttpRequest = null; 

function xmlHttpHandler(type, params, complete, postData) { 

    //Prevents an issue where previous requests get stuck and new ones then fail 
    if (global_xHttpRequest == null) { 
     global_xHttpRequest = new XMLHttpRequest(); 
    } else { 
     global_xHttpRequest.abort(); 
    } 

    //Parse out current URL 
    var baseURL = window.location.host; 
    var svc = "https://" + baseURL + "/processAction?"; 

    var url = svc + params; 

    global_xHttpRequest.open(type, url, true); 

    //Add the callback 
    global_xHttpRequest.onreadystatechange = complete; 

    global_xHttpRequest.send(postData); 
} 

這可以這樣使用:

xmlHttpHandler("GET", params, completeFnc);