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秒,用了第三种方法才修复。