问题 检查待处理的AJAX请求或HTTP GET / POST请求


如何检查页面是否有待处理的AJAX或HTTP GET / POST请求?我使用javascript和/或python进行此检查。

我想要做的是在页面完成所有请求时执行脚本。 onload对我不起作用,如果你使用了firebugs网板,你会知道的。加载页面时onload会触发,但有可能仍有待处理的请求挂在某处。

先谢谢你。


6217
2017-07-16 06:38


起源



答案:


弄清楚了。谢谢你的努力。 只是简单明了的javascript。

interValRef = 0;

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

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

10
2017-07-16 09:29



我想要的只是基本上检查页面是否已满载。没有待处理的http get / post ajax请求。上面的代码做了伎俩。 - klambiguit
我很确定在readyState变为“完成”之后仍然有待处理的HTTP请求。该 load event对应于readyState,它只是意味着初始请求已经加载了所有依赖项(而不是更多的挂起请求)。您可以在yahoo.com等网页的Chrome网络标签中看到此信息。红线是 load 事件,但经常有事情在那之后。 - user2859458


答案:


弄清楚了。谢谢你的努力。 只是简单明了的javascript。

interValRef = 0;

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

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

10
2017-07-16 09:29



我想要的只是基本上检查页面是否已满载。没有待处理的http get / post ajax请求。上面的代码做了伎俩。 - klambiguit
我很确定在readyState变为“完成”之后仍然有待处理的HTTP请求。该 load event对应于readyState,它只是意味着初始请求已经加载了所有依赖项(而不是更多的挂起请求)。您可以在yahoo.com等网页的Chrome网络标签中看到此信息。红线是 load 事件,但经常有事情在那之后。 - user2859458


我看到你提到你正在使用Prototype.js。您可以通过检查来跟踪Prototype的活动请求 Ajax.activeRequestCount 值。您可以使用setTimeout或setInterval来检查这一点,以确保在页面加载时触发的任何请求都已完成(如果这是您要查看的内容)


3
2017-07-16 09:58



这个也很好,但只检查AJAX请求。 http get / post请求怎么样? (用iframe发生) - klambiguit


我想你想知道HTML是否已完全加载。在这种情况下,您可以使用 DOM:加载 事件。这是一个关于如何将它与原型一起使用的示例(但必须有其他JS框架的变体):

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

加载DOM树后,此事件将立即触发。所以甚至在加载所有图像或外部数据(包括iframe)之前。


1
2017-07-16 09:37





这是检查它的最佳方式。

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

因此,如果完成Ajax调用,loadingDone将成立。如果它是假的,那么你可以添加等待。


1
2018-02-22 13:32





您需要跟踪每个XMLHttpRequest并监视它是否完成或异步回调是否已执行。


0
2017-07-16 06:48



有关HTML GET / POST请求的任何建议吗?如果IFRAME在页面中,就会发生这种情况。 - klambiguit


假设您正在使用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
2017-07-16 07:04



我正在使用prototype.js ..我会检查出来..谢谢.. :) - klambiguit


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

0
2018-02-27 12:02