2010-07-16 429 views
11

如何檢查頁面是否有掛起的AJAX或HTTP GET/POST請求?我使用JavaScript和/或python進行此檢查。檢查掛起的AJAX請求或HTTP GET/POST請求

我想要做的是在頁面完成所有請求時執行腳本。 onload不適用於我,如果你使用螢火蟲網絡面板,你會知道。 onload在頁面加載時觸發,但可能有掛起的請求掛在某個地方。

預先感謝您。

回答

10

想通了。感謝努力的人。 只是簡單而簡單的JavaScript。

interValRef = 0; 

interValRef = setInterval("checkState();",100) 

function checkState(){ 
    if(document.readyState == 'complete'){ 
     clearInterval(interValRef); 
     myFunc(); 
    } 
} 
+0

所有我想要的基本上檢查,如果頁面已完全加載。沒有待處理的http get/post ajax請求。上面的代碼做了訣竅。 – klambiguit 2010-07-16 09:31:45

+0

我很確定在readyState變成「完成」之後仍然可以掛起HTTP請求。 load事件與readyState相對應,它只是表示初始請求已經加載了它的所有依賴關係(而不是沒有更多未決請求)。您可以在yahoo.com等網頁的Chrome網絡標籤中看到此內容。紅線是'負載'事件,但在此之後經常會有事情發生。 – user2859458 2016-05-25 18:38:12

0

您需要跟蹤每個XMLHttpRequest並監視它是否完成或執行異步回調。

+0

關於HTML GET/POST請求的任何建議?如果IFRAME在頁面中,就會發生這種情況。 – klambiguit 2010-07-16 07:22:32

0

假設你正在使用prototype.js,你可以跟蹤你所有的請求的計數器對象

var ACTIVE_REQUESTS = 0; // GLOBAL 

ACTIVE_REQUESTS++ 
new Ajax.Request('/your/url', { 
    onSuccess: function(response) { 
    ACTIVE_REQUESTS--; 
    // Handle the response content... 
    } 
})); 

console.log("there are " + ACTIVE_REQUESTS + " open AJAX requests pending"); 
+0

我正在使用prototype.js ..我會檢查出來..謝謝.. :) – klambiguit 2010-07-16 07:12:27

1

我想你想知道HTML是否完全加載。在這種情況下,您可以使用dom:loaded事件。下面是關於如何使用原型使用(但必須有其它JS框架的一個變體)的例子:

document.observe("dom:loaded", function() { 
    // do whatever you want to do 
}); 

此事件會盡快DOM樹加載火。所以即使在加載所有圖像或外部數據(包括iframe)之前。

3

我看到你提到你正在使用Prototype.js。您可以通過檢查Ajax.activeRequestCount值來跟蹤使用Prototype的活動請求。您可以使用setTimeout或setInterval來檢查這一點,以確保頁面加載時觸發的任何請求都已完成(如果這就是您要做的)

+0

這一個也不錯,但只檢查AJAX請求。 http get/post請求怎麼樣? (發生瓦特/ iframe) – klambiguit 2010-07-19 02:28:09

0

以下是檢查它的最佳方法。

var loadingDone = document.readyState=="complete" && jQuery.active === 0; 

因此,如果完成Ajax調用,loadingDone將爲true。如果它的錯誤,那麼你可以添加等待。

0
document.addEventListener("readystatechange", function(event) { 
    if (document.readyState === "complete") { 
     console.log("complete"); 
    } 
});