`

ext connection 失败处理

阅读更多

使用Extjs进行开发系统时,客户端功能相当丰富。大部门工作都是直接从服务器获取数据再送给widgets进行显示出来。Ext.Ajax是继承Ext.data.Connection而来,而Ext.data.Store在进行加载数据时都需要用到Ext.data.Connection。

    Ext.data.Connection提供以下三个事件:

1、beforerequest  请求服务器之前

2、requestcomplete 和服务通信成功后

3、requestexception 请求失败

        而这三个事件分别在执行request、doFormUpload、handleResponse、handleFailure触发,所以,重写这四个函数就可以实现在请求服务过程中进行相关操作。

    在这里,大家可以先看一下以下几个Function   http://www.extjs.com/deploy/dev/docs/?class=Function

 

解决办法:

首先,在HTML文件中加入如下代码:

 

Html
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><div id="load-ing">
加载数据中
</div>

 

 

其loading-ing的CSS样式如下:

 


<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#load-ing{position:absolute;right:5px;top:25px;background:rgb(221, 68, 119) url(../images/loading16.gif) no-repeat 4px 2px ;z-index: 200001;
          height
:20px;line-height:20px;width:150px;font-size:12px;padding-left:30px;color:#FFF; }

 

 

通过Extjs实现提示等待功能可以有以下两种解决办法:

一、可以监听beforerequest  、requestcomplete 、requestexception 事件,在每次用到Ext.Ajax或Ext.data.Connection时都写监听函数。

    此方向可以解决问题,但是,每次使用Ext.Ajax或Ext.data.Connection都需要写监听函数,这样,重复工作较多。不可行

二、重写Ext.data.Connection

    重写Ext.data.Connection的request、doFormUpload、handleResponse、handleFailure几个函数,在执行这几个函数之前选执行你的动作。代码如下:

 

override Ext.data.Connection
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->Ext.override(Ext.data.Connection,{
    request : Ext.data.Connection.prototype.request.createSequence(function(){ 
        Ext.get('load-ing').show();
    }),
    handleResponse : Ext.data.Connection.prototype.handleResponse.createSequence(
function(){ 
            Ext.get('load-ing').hide();
    }),
    doFormUpload : Ext.data.Connection.prototype.doFormUpload.createSequence(
function(){ 
            Ext.get('load-ing').hide();
    }),
    handleFailure : Ext.data.Connection.prototype.handleFailure.createSequence(
function(){ 
        Ext.DomHelper.overwrite(Ext.get(
'load-ing'),'加载出错,建议 <a onclick="window.location.reload();" href="#"><b>刷新本页</b></a> !')
    
this.serail=this.serail-100;
    })
})

 

 

问题:

在一个页面中同时执行几个request函数时,当第一个request执行完成后,“载数据中”将会被隐藏,而这时可能页面还在和服务器通信。所以这种办法并不能根据解决问题。于是想到了加入标志的方法。

    当执行一次Ext.get('load-ing').show();时,标志加一,当执行一次Ext.get('load-ing').hide();时,标志减一。代码如下:

 

Ext.data.Connection
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->Ext.override(Ext.data.Connection,{
    serail : 
0,
    request : Ext.data.Connection.prototype.request.createSequence(
function(){ 
        
this.serail++;
        Ext.get(
'load-ing').show();
    }),
    handleResponse : Ext.data.Connection.prototype.handleResponse.createSequence(
function(){ 
        
if(this.serail==1)
            Ext.get(
'load-ing').hide();
        
this.serail--;
    }),
    doFormUpload : Ext.data.Connection.prototype.doFormUpload.createSequence(
function(){ 
        
if(this.serail==1)
            Ext.get(
'load-ing').hide();
        
this.serail--;
    }),
    handleFailure : Ext.data.Connection.prototype.handleFailure.createSequence(
function(){ 
        Ext.DomHelper.overwrite(Ext.get(
'load-ing'),'加载出错,建议 <a onclick="window.location.reload();" href="#"><b>刷新本页</b></a> !')
    
this.serail=this.serail-100;
    })
})

 

 

实现效果:
1、在于服务器进行通信时的提示如下:
2、当于服务器通信失败时会提示:
分享到:
评论

相关推荐

    ext 基本知识-store-proxy-reader-ext-connection-实例

    总结起来,本篇内容涵盖了ExtJS中的核心数据组件,包括Ext.data.Connection的使用、Ext.data.Record的创建与操作、Ext.data.Store的配置以及数据交互的Proxy和Reader机制。这些知识是构建基于ExtJS的异步数据驱动...

    深入浅出Ext_JS:数据存储与传输

    本篇将重点讲解Ext.data模块,包括其基本概念、主要组件以及如何进行数据的获取和处理。 10.1 Ext.data简介 Ext.data是一个专门处理数据的模块,它包含了store、reader和proxy等组件,这些组件协同工作以确保数据在...

    Ext2.0.2的Ajax请求拦截示例

    // 处理请求失败的情况 console.error('Request failed'); } }); ``` 然而,如果我们需要为整个应用的Ajax请求设置统一的拦截器,可以使用`Ext.Ajax.on`方法来监听`beforerequest`和`requestcomplete`事件: ``...

    Ext3.0 实现验证码

    这通常涉及到Ajax请求,Ext3.0的Ajax组件(如Ext.Ajax或Ext.data.Connection)可以方便地实现异步通信,使得用户无需刷新页面即可完成验证。 在实际项目中,为了提高用户体验,还可以加入一些额外的功能,比如: 1...

    Ext 实现 文件上传 进度显示

    实现文件上传进度显示的关键在于使用Ajax异步请求,`Ext.Ajax`或`Ext.data.Connection`可以用来配置这种请求。我们需要开启`async: true`,设置`params`参数以包含文件数据,同时启用`progress`事件监听,以便在每次...

    ext开发_前后台交互

    相比之下,`Ext.Ajax.request()`提供了更强大的错误处理能力,能捕获各种异常,包括数据未提交到后台或action不存在的情况。这意味着开发者需要手动检查返回数据中的`success`字段来决定执行哪条路径,同时也给予了...

    Ext.data专题

    与直接使用 **Ext.lib.Ajax** 相比,**Ext.data.Connection** 提供了更加高级和方便的功能,如自动处理错误和回调函数等。 ##### 创建连接实例 创建一个新的 **Ext.Connection** 实例时,可以通过构造函数配置各种...

    extjs数据存储与传输

    `Ext.data.Connection`不仅能够处理基本的Ajax请求,还能通过其灵活的配置项应对各种复杂的网络通信需求。 - **初始化配置**:在创建`Ext.data.Connection`实例时,可以传入一系列配置参数,如`autoAbort`(是否...

    extjs 的权限问题 要求控制的对象是 菜单,按钮,URL

    客户端通过重载Connection类来拦截所有数据交互,并在需要的时候处理权限验证失败的逻辑。服务器端则需要为每个请求提供定制化的JSON数据,这些数据中就包含了权限控制的逻辑,比如哪些菜单项是根据当前登录用户的...

    ExtJs登陆验证(ASP后台)

    例如,可以使用`Ext.form.Panel`创建表单,`Ext.form.field.Text`定义文本输入字段,以及`Ext.Button`定义提交按钮。 登录验证的过程通常包括以下几个步骤: 1. 用户在前端填写用户名和密码。 2. 用户点击登录按钮...

    ExtJs做的用户登陆!ASP后台

    // 登录失败处理 } }); ``` 在ASP后台,`login.asp`页面接收到这些参数后,需要进行身份验证。ASP是一种服务器端脚本语言,可以与数据库交互,检查用户名和密码是否匹配。以下是一个简单的示例: ```vbscript ...

    安卓Android源码——AsyncTask_Download1.rar

    // 下载失败,处理错误 } } } ``` **注意事项** 1. 使用AsyncTask时,要确保在主线程中启动任务(`execute()`方法)。 2. Android系统会根据内存情况自动取消长时间运行的AsyncTask,因此需要处理` onCancelled...

    sqlserver2005数据库连接java版

    如果失败,输出错误信息。 6. **执行数据库操作**: - 示例中提到了对名为"S"表的操作,这通常涉及编写SQL查询或存储过程,并使用`Statement`、`PreparedStatement`或`CallableStatement`对象来执行。 - 对数据的...

    java链接MySQL

    - 如果手动设置,将`mysql-connector-j-8.2.0.jar`放在`JAVA_HOME/jre/lib/ext`目录下或项目根目录下的`lib`文件夹,并在`CLASSPATH`环境变量中添加该路径。 2. **建立数据库连接** 要连接到MySQL,我们需要使用`...

    精彩编程与编程技巧-在Access 2000中用ADO...

    - Microsoft ADO Ext. 2.1 for DDL and Security. - Microsoft Jet and Replication Objects 2.1 Library. 2. **创建ADO连接对象**: - 在Visual Basic编辑器中新建一个模块。 - 定义一个ADO连接对象,例如使用...

    Java通过JDBC链接SQLServer2012.pdf

    - 创建数据库连接:`Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=;user=;password=&lt;password&gt;");` - 编写SQL语句并执行 - 处理结果集 - 关闭连接 7. **异常...

    MyEclipse连接SQLServer 2008 问题全解

    - 编写Java代码以测试数据库连接,使用`Class.forName()`加载驱动,`DriverManager.getConnection()`建立连接。 9. **处理常见问题**: - 如果出现“链接失败”的错误,检查`Class.forName()`的参数是否正确,...

    mysql_jdbc连接数据库-错误提示.pdf

    1. **将驱动包放置于正确位置**:将MySQL驱动包(如mysql-connector-java-5.0.8-bin.jar)放置于JDK的`jre\lib\ext\`目录下。 2. **配置开发环境**:确保IDE(如Eclipse、IntelliJ IDEA等)的项目构建路径中包含了...

Global site tag (gtag.js) - Google Analytics