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

时间:2010-07-16 06:38:04

标签: javascript python html

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

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

提前谢谢。

8 个答案:

答案 0 :(得分:10)

想通了。谢谢你的努力。 只是简单明了的javascript。

interValRef = 0;

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

这是检查它的最佳方式。

module com.dua3.utility {
    exports com.dua3.utility;
    exports com.dua3.utility.io;
    exports com.dua3.utility.jfx;
    exports com.dua3.utility.swing;
    exports com.dua3.utility.lang;
    exports com.dua3.utility.math;
    exports com.dua3.utility.text;

    requires javafx.controls;
    requires javafx.web;
    requires java.xml;
    requires java.desktop;
    requires org.apache.logging.log4j;
}

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

答案 4 :(得分:0)

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

答案 5 :(得分: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");

答案 6 :(得分:0)

    @Component({
  selector: 'ax-mat-time-picker',
  exportAs: 'axMatTimePicker',
  templateUrl: './time-picker.component.html',
  styleUrls: ['./time-picker.component.scss'],
  encapsulation: ViewEncapsulation.None,
  preserveWhitespaces: false,
  providers: [
    { provide: MatFormFieldControl, useExisting: AxMatTimePicker },
    DecimalPipe
  ],
  host: {
    'class': 'ax-mat-time-picker',
    '[class.floating]': 'shouldLabelFloat',
    '[id]': 'id',
    '[attr.aria-describedby]': 'describedBy'
  }
})
export class AxMatTimePicker implements MatFormFieldControl<Time>, OnDestroy {...}

答案 7 :(得分:0)

我可以确认,即使网络选项卡中有待处理的请求,document.readyState 仍然可以“完成”。

我现在开发的用于检查页面是否已完全加载的代码是:

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 长度。 不是最好的解决方案,但至少它有效。