拦截所有的ajax请求,异步请求返回数据拦截不到?

var open = window.XMLHttpRequest.prototype.open,
send = window.XMLHttpRequest.prototype.send,
onReadyStateChange;

function openReplacement(method, url, async, user, password) {
var syncMode = async !== false ? 'async' : 'sync';
return open.apply(this, arguments);//可以理解成是继承,继承open对象中的属性和方法
}

function sendReplacement(data) {

if(this.onreadystatechange) {
    this._onreadystatechange = this.onreadystatechange;
}
this.onreadystatechange = onReadyStateChangeReplacement;

return send.apply(this, arguments);

}

function onReadyStateChangeReplacement() {
if( this.readyState==4) {

//我这里是做返回数据的处理

}

}
window.XMLHttpRequest.prototype.open = openReplacement;
window.XMLHttpRequest.prototype.send = sendReplacement;

所有ajax请求在发送处理之前可以截到,但是异步的请求拦截不到返回来的数据,它直接进了ajax的success。感觉是没有触发onstatechange,请问大家我该如何处理?谢谢。

1个回答

没问题吧


    function onReadyStateChangeReplacement() {
        document.title += ',' + this.readyState;///增加这句在firefox下标题可以显示出1~4的状态
showbo
支付宝加好友偷能量挖 回复yyc0114: 你的什么浏览器,IE的话本地创建用的是acx,不是XMLHttpRequest对象,或者禁用了XMLHttpRequest也用的acx来创建的。你直接用jquery的jQuery.ajaxSetup就好了吧,干么要重写XMLHttpRequest对象。jQuery.ajaxSetup({beforeSend :function(xhr){/*发送请求前可修改 XMLHttpRequest 对象的函数,如添加自定义 HTTP 头。*/}})
大约 5 年之前 回复
yyc0114
yyc0114 回复showbo: 我用的是jQuery ajax发的请求 我想做的是拦截到所有的ajax请求 数据返回时先对数据做一些特殊处理再返回给jQuery ajax的success,但是这一段代码当请求是异步的时候就不起作用了,跟踪调试发现异步是没有进入onReadyStateChangeReplacement这个函数 啊 ,求解 大神。
大约 5 年之前 回复
showbo
支付宝加好友偷能量挖 回复yyc0114: 测试了没有问题啊。标题栏上都显示状态了。chrome,firefox都可以。什么叫直接进入success?纯ajax是没有success回调什么的,只有readyState,status来判断是否返回和成功了
大约 5 年之前 回复
yyc0114
yyc0114 还是不得行啊 只要是异步的请求 数据返回后就直接进ajax的success了 不得进onReadyStateChangeReplacement啊
大约 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问