JavaScript:检测AJAX请求
是否可以通过通用JavaScript(而不是框架)检测网页上的全局AJAX调用(尤其是响应)?
我已经在StackOverflow上审查了“JavaScript检测到AJAX事件 ”
的问题,并尝试将接受的答案的代码修补到我的应用程序中,但是没有用。之前,我从未使用AJAX做任何事情,我还不足以对其进行修改以使其正常工作。
我不需要任何花哨的东西,我只需要检测所有(特定的,实际上,但是我必须先检测所有的AJAX响应,然后将它们修补到IF语句中才能使用)。所以,最终,我想要这样的东西:
if (ajax.response == "certainResponseType"){ //Code
}
, 例如。
看来我应该澄清一下,我不是在尝试发送请求-我正在开发内容脚本,并且我需要能够 检测
网页的AJAX请求(不是我自己的请求),因此我可以执行检测到响应时起作用。
回答:
以下是一些代码(通过粘贴到Chrome31.0.1650.63的控制台中进行测试),用于捕获和记录或以其他方式处理ajax请求及其响应:
(function() { var proxied = window.XMLHttpRequest.prototype.send;
window.XMLHttpRequest.prototype.send = function() {
console.log( arguments );
//Here is where you can add any code to process the request.
//If you want to pass the Ajax request object, pass the 'pointer' below
var pointer = this
var intervalId = window.setInterval(function(){
if(pointer.readyState != 4){
return;
}
console.log( pointer.responseText );
//Here is where you can add any code to process the response.
//If you want to pass the Ajax request object, pass the 'pointer' below
clearInterval(intervalId);
}, 1);//I found a delay of 1 to be sufficient, modify it as you need.
return proxied.apply(this, [].slice.call(arguments));
};
})();
此代码以可接受的答案解决了上述问题:
请注意,如果使用框架(如jQuery),则可能无法正常工作,因为调用send后它们可能会覆盖onreadystatechange(我认为jQuery确实如此)。或者他们可以覆盖send方法(但这是不可能的)。因此,这是部分解决方案。
因为它不依赖于未更改“ onreadystatechange”回调,而是监视“ readyState”本身。
以上是 JavaScript:检测AJAX请求 的全部内容, 来源链接: utcz.com/qa/402437.html