您的位置:首页 > Web前端 > JavaScript

ExtTree.js异步全加载数据出现超时现象解决方案

2016-10-17 15:57 239 查看


Ext Tree 加载超时 Timeout 问题的解决办法

博客分类: 

ExtJStimeoutextjsext 

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

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

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

   

requestData : function(A, B) {  

                if (this.fireEvent("beforeload", this, A, B) !== false) {  

                    this.transId = Ext.Ajax.request({  

                                method : this.requestMethod,  

                                url : this.dataUrl || this.url,  

                                success : this.handleResponse,  

                                failure : this.handleFailure,  

                                                               timeout: this.timeout || 300000,//增加这一行,设置为5分钟  

                                scope : this,  

                                argument : {  

                                    callback : B,  

                                    node : A  

                                },  

                                params : this.getParams(A)  

                            })  

                } else {  

                    if (typeof B == "function") {  

                        B()  

                    }  

                }  

 当然有的人可能不大喜欢在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 属性设置
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐