检查待处理的 AJAX 请求或 HTTP GET/POST 请求
Posted
技术标签:
【中文标题】检查待处理的 AJAX 请求或 HTTP GET/POST 请求【英文标题】:Check Pending AJAX requests or HTTP GET/POST request 【发布时间】:2011-03-16 19:17:00 【问题描述】:如何检查页面是否有待处理的 AJAX 或 HTTP GET/POST 请求?我使用 javascript 和/或 python 进行此检查。
如果页面已完成所有请求,我想做的是执行脚本。 onload 对我不起作用,如果您使用 firebugs 网络面板,您就会知道。 onload 在页面加载时触发,但仍有可能在某处挂起待处理的请求。
提前谢谢你。
【问题讨论】:
【参考方案1】:我可以确认 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 长度。 不是最好的解决方案,但至少可行。
【讨论】:
【参考方案2】:document.addEventListener("readystatechange", function(event)
if (document.readyState === "complete")
console.log("complete");
);
【讨论】:
【参考方案3】:这是最好的检查方法。
var loadingDone = document.readyState=="complete" && jQuery.active === 0;
因此,如果 Ajax 调用完成,loadingDone 将为真。如果它是假的,那么你可以添加等待。
【讨论】:
ja,它是正确的。我对硒测试做同样的事情【参考方案4】:我看到你提到你正在使用 Prototype.js。您可以通过检查 Ajax.activeRequestCount
值来使用 Prototype 跟踪活动请求。您可以使用 setTimeout 或 setInterval 进行检查,以确保在页面加载时触发的任何请求都已完成(如果这是您要执行的操作)
【讨论】:
这个也不错,但只检查 AJAX 请求。 http get/post 请求怎么样? (使用 iframe 发生)【参考方案5】:我想您想知道 HTML 是否已完全加载。在这种情况下,您可以使用dom:loaded 事件。这是一个关于如何将它与原型一起使用的示例(但必须有其他 JS 框架的变体):
document.observe("dom:loaded", function()
// do whatever you want to do
);
一旦加载了 DOM 树,就会触发此事件。所以即使在所有图像或外部数据(包括 iframe)都被加载之前。
【讨论】:
【参考方案6】:想通了。感谢你们的努力。 只是简单的javascript。
interValRef = 0;
interValRef = setInterval("checkState();",100)
function checkState()
if(document.readyState == 'complete')
clearInterval(interValRef);
myFunc();
【讨论】:
我想要的只是检查页面是否已完全加载。没有待处理的 http get/post ajax 请求。上面的代码成功了。 我很确定在 readyState 变为“完成”后仍有待处理的 HTTP 请求。load
事件与 readyState 相对应,它仅表示初始请求已加载其所有依赖项(而不是不再挂起的请求)。您可以在 yahoo.com 等页面上的 Chrome 网络标签中看到这一点。红线是load
事件,但之后通常会有未决的事情发生。【参考方案7】:
假设您使用的是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");
【讨论】:
【参考方案8】:您需要跟踪每个 XMLHttpRequest 并监控它是否完成或异步回调是否被执行。
【讨论】:
对 HTML GET/POST 请求有什么建议吗?如果 IFRAME 在页面中,就会发生这种情况。以上是关于检查待处理的 AJAX 请求或 HTTP GET/POST 请求的主要内容,如果未能解决你的问题,请参考以下文章
jQuery AJAX GET/POST 请求在错误处理程序中返回 404,但从服务器发送了有效响应
jQuery – AJAX get() 和 post() 方法