当前位置: 代码迷 >> Web前端 >> Ext Tree 加载超时 Timeout 有关问题的解决方法
  详细解决方案

Ext Tree 加载超时 Timeout 有关问题的解决方法

热度:725   发布时间:2012-10-28 09:54:44.0
Ext Tree 加载超时 Timeout 问题的解决办法

????? 这几天老板让我将师姐曾经做过的一个预案推荐的功能跑起来,算法我没有深究,功能就是将推荐出来的预案按照树形显示出来,异步加载,点击根节点,才去后台取数据一次性将所有子节点获取,并展开。部署到服务器,页面也能访问,点击根节点,也能执行加载过程,后台运作也正常,但是前台总是超时,根节点停止获取数据,死掉了。

????? 查寻这方面的资料实在是少,因为大部分应用很难遇到这种情况,出现节点很多的,人家都是采取异步加载,点击一个父节点,才展开一个子节点,而这个是全部获取,另外师姐这个时间主要浪费在了预案推荐算法的执行上了,这是大头,具体算法没有研究,暂时提不出优化方案,目前就只是在现有情况下实现解决。

???? 将解决方法提出来,供其他遇到的朋友解决。将页面引用的ext-all.js文件打开,然后定位到requestData部分,如下所示,然后在Ext.Ajax.request中 添加 timeout配置项,设定超时时间,可自定,这里设定为五分钟。然后重新部署,允许,圆满解决。

???

  1. requestData?:?function(A,?B)?{??
  2. ????????????????if?(this.fireEvent("beforeload",?this,?A,?B)?!==?false)?{??
  3. ????????????????????this.transId?=?Ext.Ajax.request({??
  4. ????????????????????????????????method?:?this.requestMethod,??
  5. ????????????????????????????????url?:?this.dataUrl?||?this.url,??
  6. ????????????????????????????????success?:?this.handleResponse,??
  7. ????????????????????????????????failure?:?this.handleFailure,??
  8. ???????????????????????????????????????????????????????????????timeout:?this.timeout?||?300000,//增加这一行,设置为5分钟??
  9. ????????????????????????????????scope?:?this,??
  10. ????????????????????????????????argument?:?{??
  11. ????????????????????????????????????callback?:?B,??
  12. ????????????????????????????????????node?:?A??
  13. ????????????????????????????????},??
  14. ????????????????????????????????params?:?this.getParams(A)??
  15. ????????????????????????????})??
  16. ????????????????}?else?{??
  17. ????????????????????if?(typeof?B?==?"function")?{??
  18. ????????????????????????B()??
  19. ????????????????????}??
  20. ????????????????}??

?当然有的人可能不大喜欢在ext-all.js中做全面修改,也可以这样修改。在页面js中,添加如下代码。

?

有store的

var connObj = new Ext.data.Connection({?
timeout : 120000,?
url : ‘/jsp/dataSourceURL’,?
method : ‘POST’?
});

var dataStore = new Ext.data.Store({?
// load using HTTP?
proxy : new Ext.data.HttpProxy(connObj),?
reader : new Ext.data.JsonReader({?
root : ‘rows’,?
totalProperty : ‘results’?
}, recordFormat)?
});

树:

Ext.tree.TreeLoader.override({
requestData?:?function(node,?callback){
if(this.fireEvent("beforeload",?this,?node,?callback)?!==?false){
this.transId?=?Ext.Ajax.request({
method:this.requestMethod,
url:?this.dataUrl||this.url,
success:?this.handleResponse,
failure:?this.handleFailure,
timeout:?this.timeout?||?30000,
scope:?this,
argument:?{callback:?callback,?node:?node},
params:?this.getParams(node) }else{
//?if?the?load?is?cancelled,?make?sure?we?notify
//?the?node?that?we?are?done
if(typeof?callback?==?"function"){
callback(); } });??

form :?

basicForm :timeout 属性设置

?

?

  相关解决方案