ExtJS做Ajax请求时,Ext.Ajax.request()调用Ext.data.Connection.request()方法。 在Ext.data.Connection中默认timeout : 30000,,如果后台数据查询时间超过30秒,ExtJS就会报错。
这就需要修改ExtJS的超时时间:
1. 更改默认值的方式:Ext.Ajax.timeout=120000; //120秒
Ext.application({
name: ' ........',
appFolder: ' ........ ',
stores: [],
controllers: ['MainCtrl'],
launch: function () {
Ext.Ajax.timeout=120000; //120秒
........
}
}); 可以在application中修改。
2.直接在request方法中修改 当前请求的超时时间:
Ext.Ajax.request({
url: '........ ',
success: function(){........ },
failure: function(){........ },
timeout: 300000
});
3. 使用 Ext.data.Store 时:在proxy 对象属性中直接修改。
Ext.define( '........ ',
{
extend:'Ext.data.Store',
fields:[ ........ ],
proxy: {
actionMethods:{read:'POST'},
type: 'ajax',
reader: {
type: 'json',
root: 'data'
},
timeout:1200000,
url: '........'
},
autoLoad: true
});
在项目中,遇到过这种情况,在MainCtrl.js 中加载了多个全局 Store来存储数据字典,其中一个数据比较大,经常30秒就超时。排查过程中才发现,
Ext.application({
name: ' ........',
appFolder: ' ........ ',
stores: [],
controllers: ['MainCtrl'],
launch: function () {
Ext.Ajax.timeout=120000; //120秒
........
}
}); 虽然在application 的launch 方法中 修改了 超时时间,但MainCtrl.js的加载还在修改
超时时间之前,导致在MainCtrl.js中
Store加载数据 的请求超时时间还是30秒,用了第三种方法才修复。

本文介绍了在ExtJS中如何处理Ajax请求超时的问题。默认情况下,Ext.data.Connection的timeout设置为30秒,当后台数据查询超过这个时间会报错。解决方法包括:1) 在应用级别全局设置Ext.Ajax.timeout;2) 在单独的请求中指定timeout;3) 在使用Ext.data.Store时,在proxy中配置timeout。在实际项目中,若Store加载数据字典时遇到超时,需要确保在加载控制器之前设置超时时间。
428

被折叠的 条评论
为什么被折叠?



