gpt4 book ai didi

extjs - Chrome 中 Ext.Ajax.request 超时后未捕获异常

转载 作者:行者123 更新时间:2023-12-02 02:47:04 25 4
gpt4 key购买 nike

我使用的是 ExtJS 4.1,当发生超时时,我在 Google Chrome 中遇到未捕获的异常。

Ext.Ajax.timeout = 10000; // 10 seconds
Ext.Ajax.method = "GET";
Ext.Ajax.request({
url:'rest/dataloggerset.json',
params:{
sessionGuid:Ext.getStore("User").getAt(0).get("sessionGuid"),
loggerId:this.availableLogFiles.loggerId,
logSet:this.currentLog
},
success:this.processReceivedLogData,
failure:this.failureDuringResourceLoad,
scope:this
});

请求以超时结束,并且尝试在对象中解析迄今为止接收到的数据。因此,我在开发人员控制台中看到的未捕获的异常如下所示:

未捕获错误:INVALID_STATE_ERR:DOM 异常 11 Connection.js:914Ext.define.createResponse Connection.js:914Ext.define.onComplete Connection.js:859Ext.define.abort Connection.js:767request.timeout

这个问题在 FF 中不会出现。由于未捕获的异常,我的方法 failureDuringResourceLoad 未被调用。

值得一提的是,当定义的超时时间过去后,数据仍在传输。

有什么想法吗?

最佳答案

经过一些研究,我发现 xhr.abort() 行为在 Chrome 和 FF 中有所不同。在 Chrome 中,xhr.status 保持不变 200,而 FF 中的状态在调用 xhr.abort() 后设置为 0。

此差异会在 ExtJS 4.1 中产生影响,即超时请求被误认为是有效响应。我使用以下覆盖来处理超时情况。在 ExtJS 4.1 中,请求对象上的变量标记是否发生超时。该重写替换了 onComplete 方法。

Ext.define('Df.data.Connection', {
override: 'Ext.data.Connection',

onComplete : function(request) {
var me = this,
options = request.options,
result,
success,
response;

try {
result = me.parseStatus(request.xhr.status);
} catch (e) {
// in some browsers we can't access the status if the readyState is not 4, so the request has failed
result = {
success : false,
isException : false
};
}

success = result.success && !request.timedout;

if (success) {
response = me.createResponse(request);
me.fireEvent('requestcomplete', me, response, options);
Ext.callback(options.success, options.scope, [response, options]);
} else {
if (result.isException || request.aborted || request.timedout) {
response = me.createException(request);
} else {
response = me.createResponse(request);
}
me.fireEvent('requestexception', me, response, options);
Ext.callback(options.failure, options.scope, [response, options]);
}
Ext.callback(options.callback, options.scope, [options, success, response]);
delete me.requests[request.id];
return response;
}
});

可以在 Connection.js 中原始位置的第 856 行找到更改。我已经延长了

success = result.success;

至:

success = result.success && !request.timedout;

如果有更方便的方法来解决这个问题请告诉我!

关于extjs - Chrome 中 Ext.Ajax.request 超时后未捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13471419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com