Extjs本身并没有对响应超时做单独的处理,而是会和其他异常处理一样,是返回一个status为-1 statusText为transaction aborted来标识。超时时会触发Ajax请求的failure回调,从参数中可以获取status和statusText这两个属性。可以用这个来判断超时,不过这个并不准确,因为有别的异常状态也会产生这样的结果。如果想要确切的超时响应,那就只有自己去处理了,最简单的办法就是将Ext.lib.Ajax.abort这个方法进行重写
Ext.lib.Ajax.abort=function(o, callback, isTimeout)
{
if (this.isCallInProgress(o)) {
o.conn.abort();
window.clearInterval(this.poll[o.tId]);
delete this.poll[o.tId];
if (isTimeout) {
delete this.timeout[o.tId];
var obj = {tId:0,status:408,statusText:"timeout"};
if(callback.argument){
obj.argument=callback.argument;
}
if (!callback.scope) {
callback.failure(obj);
}
else {
callback.failure.apply(callback.scope, [obj]);
}
return true;
}
this.handleTransactionResponse(o, callback, true);
return true;
}
else {
return false;
}
};
给你一个简单的参考吧,在这个方法之后的Ajax请求超时会有响应,也是会跳到Ajax请求的failure回调中,在这里判断xhr对象的status为408 statusText为timeout,通过这两个之一进行判断即可。只是作为一个简单的参考,可以在此基础上进行修改。也可以跳到success回调中,那就看你想怎么处理了
(Love me) && (Love my bug);