Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查挂起的AJAX请求或HTTP GET/POST请求_Javascript_Python_Html - Fatal编程技术网

Javascript 检查挂起的AJAX请求或HTTP GET/POST请求

Javascript 检查挂起的AJAX请求或HTTP GET/POST请求,javascript,python,html,Javascript,Python,Html,如何检查页面是否有挂起的AJAX或HTTP GET/POST请求?我使用javascript和/或python进行此检查 我想做的是,如果页面已完成所有请求,则执行一个脚本。onload对我不起作用,如果你使用Firebug网络面板,你会知道的。当加载页面时,onload会触发,但有可能仍然有挂起的请求挂在某个地方 提前感谢。您需要跟踪每个XMLHttpRequest,并监视它是否完成或异步回调是否执行。假设您使用的是prototype.js,您可以跟踪所有请求对象的计数器 var ACTIVE

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

我想做的是,如果页面已完成所有请求,则执行一个脚本。onload对我不起作用,如果你使用Firebug网络面板,你会知道的。当加载页面时,onload会触发,但有可能仍然有挂起的请求挂在某个地方


提前感谢。

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

假设您使用的是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");

我明白了。谢谢大家的努力。 只是简单明了的javascript

interValRef = 0;

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

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

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


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

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

以下是检查它的最佳方法

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

因此,如果Ajax调用完成,loadingDone将为true。如果为false,则可以添加等待。

我可以确认document.readyState仍然可以是“完整”的,即使网络选项卡中有挂起的请求

document.addEventListener("readystatechange", function(event) {
    if (document.readyState === "complete") {
        console.log("complete");
    }
});
我现在开发的用于检查页面是否已完全加载的代码是:

var prevSize= document.body.innerHTML.length;
var id= setInterval(()=>{
    let currSize=document.body.innerHTML.length;
    if(prevSize===currSize){
          clearInterval(id);
          console.log("page loaded successfully");
        }
     else{
          console.log("loading...");
          prevSize=currSize;
        }
}, 3000)
这将每隔3秒检查document.body.innerHTML的长度。
这不是一个最佳的解决方案,但至少是有效的。

对HTML GET/POST请求有什么建议吗?如果一个IFRAME在一个页面中,就会发生这种情况。我只想基本上检查页面是否已完全加载。没有挂起的http get/post ajax请求。上面的代码做到了这一点。我非常确定,在readyState变为“完成”之后,仍然会有挂起的HTTP请求。
load
事件与该readyState相对应,它仅仅意味着初始请求已加载了其所有依赖项(与不再有未决请求相反)。你可以在类似yahoo.com的网页上的Chrome的网络标签中看到这一点。红线是
load
事件,但之后通常会有挂起的事情。这条线也很好,但只检查AJAX请求。http get/post请求怎么样?(与iframe一起发生)是的,它是正确的。我也在做硒测试
var prevSize= document.body.innerHTML.length;
var id= setInterval(()=>{
    let currSize=document.body.innerHTML.length;
    if(prevSize===currSize){
          clearInterval(id);
          console.log("page loaded successfully");
        }
     else{
          console.log("loading...");
          prevSize=currSize;
        }
}, 3000)