下面是一些代码(通过粘贴到 Chrome 31.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 可以)。或者他们可以覆盖发送方法(但这不太可能)。所以这是一个部分的解决方案。
因为它不依赖未更改的“onreadystatechange”回调,而是监控“readyState”本身。
我从这里调整了答案:https ://stackoverflow.com/a/7778218/1153227