2010-07-16 187 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"); 
    } 
});