`
KeepCrazy
  • 浏览: 60588 次
社区版块
存档分类
最新评论

ExtJs:Ajax表单验证的错误提示

阅读更多
[size=medium]

    当用户在前台填写完一个文本表单域后, 程序将用户填写的值传回服务器进行合法性验证, 然后在浏览器上提示填写的值是否可用.这种业务需求非常常见, 比如用户注册时检查用户名是否已被占用。那么如何用ExtJs完成这个小功能呢?
    假如有这样一个表单域,当用户填写完甚至填写时就要对填写的值进行唯一性验证。
    相关代码如下:
{
    fieldLabel: '用户名',
    name: 'username',
    xtype:'textfield',
    validationOnBlur : true, //失去焦点时进行验证
    validationOnChange : true, //发生改变时进行验证
    validator:function(){//配置验证方法, 通过这个方法和服务器进行交互
        var cmpUsername=formPanel.form.findField('username');//formPanel是放置这个组件的面板, 此处没有写出
        var value=cmpUsername.getValue();
        if(value.length!=0){//当值不为空时才进行唯一性验证
            Ext.Ajax.request({
                params:{'username':value},
                method:"POST",
                url:'check.do'
                success:function(response,options){
                    if(response.responseText=='false'){//服务器端的返回值为'false'
                        cmpUsername.markInvalid("该用户名已经被占用!");//这个方法可以给表单组件加上红圈圈和悬浮提示
                    }
                }
            });
        }
    }
 }


    validator函数的返回值是这样定义的:合法时返回布尔值true,不合法时返回错误信息字符串. 所以有人会这样写validator函数:

 function(){
     var flag = false;
     Ext.Ajax.request({
          url: '...',
          params:{'username':value},
          method: 'POST',
          success: function (response, options) {
              if(response.responseText == "false"){
                  flag = "该用户名已经被占用";//不合法时
                  //alert('ajax');//测试用的alert2
              }
              else{
                  flag =  true;//合法时
              }
              
          }
      });
     //alert('validator');//测试用的alert1
     return flag;
 }

    从逻辑上来说,这样做没错, 但实际上并不能取得想要的效果, 原因是Ajax函数的异步性质.如果将代码中的两个alert去掉然后再执行程序, 会发现alert1会在alert2之前执行,也就是说request的success函数会在validator函数执行完之后才执行,那么它里面对flag的赋值代码当然也就无效了.
[/size]
0
0
分享到:
评论
3 楼 bfttt999 2013-04-17  
async 这个参数是xhr的,并非ExtJS的内定参数,所以理论上无论哪个版本都无所谓。
就算是用JQuery也应该能起作用。
2 楼 KeepCrazy 2013-04-16  
bfttt999 写道
ajax这个问题一开始也困扰了我好久,不过现在可以用同步调用来实现这个目的了。
async:false
示例类似于这样:
var reqOptions={
    url:methodUrl,
    async:false,
params:postData,
method:'POST',
callback:function(options,success,resp){
//do something
}
    };
    opts = opts||{};
    Ext.apply(reqOptions,opts);
Ext.Ajax.request(reqOptions);


我用的是ExtJs3.2, 不支持这个配置...听说4可以
1 楼 bfttt999 2013-04-11  
ajax这个问题一开始也困扰了我好久,不过现在可以用同步调用来实现这个目的了。
async:false
示例类似于这样:
var reqOptions={
    url:methodUrl,
    async:false,
params:postData,
method:'POST',
callback:function(options,success,resp){
//do something
}
    };
    opts = opts||{};
    Ext.apply(reqOptions,opts);
Ext.Ajax.request(reqOptions);

相关推荐

    ExtJS+Servlet表单验证和注册

    一旦表单验证通过,ExtJS会通过Ajax方式发送HTTP请求到后台Servlet。 Servlet接收到请求后,会进一步验证数据的完整性和安全性,如防止SQL注入等。如果验证无误,Servlet将这些数据保存到数据库,通常涉及到数据库...

    extjs最全项目 js struts Ajax

    **标题详解:** "extjs最全项目 js struts Ajax" 这个标题暗示了这是一个综合性的IT项目,主要涉及EXTJS框架、JavaScript(js)、Struts框架以及Ajax技术。EXTJS是一个用于构建用户界面的前端JavaScript库,它提供...

    EXT 表单验证EXT 表单验证

    8. **国际化支持**:EXT表单验证也考虑到了多语言环境,可以轻松切换不同语言的错误提示。这通过设置全局的`Ext.MessageBox`或每个字段的`invalidText`属性实现。 9. **插件和扩展**:EXT社区提供了许多表单验证...

    Ajax框架ExtJS3.0源代码

    6. **表单处理**:ExtJS3.0的表单组件功能强大,支持多种输入类型,可以进行数据验证,提供表单的提交和重置操作,方便进行用户输入的处理。 7. **拖放功能**:通过DragDrop和DDGroup接口,开发者可以轻松实现组件...

    Extjs页面验证(修订版)

    在"Extjs页面验证(修订版)"这个项目中,我们将探讨ExtJS如何实现表单验证以及与服务器端的数据交互。 1. **ExtJS表单验证**: - 表单是任何应用程序中的关键组成部分,尤其是涉及到用户输入数据时。ExtJS提供了...

    ExtJs4.0 表单提交Demo

    表单字段可以通过配置项定义,包括字段类型、验证规则、提示信息等。 2. **Ext Ajax模块** Ext.Ajax是ExtJs中的一个核心类,负责处理异步的Ajax请求。通过它,开发者可以轻松地向服务器发送GET、POST等HTTP请求,...

    extjs实现登陆验证

    3. **表单验证与提交**:在`subjectForm`函数中,使用`myform.getForm().isValid()`检查表单是否有效,如果有效,则通过`form.submit()`方法提交表单数据,设置等待消息、超时时间、成功和失败回调。成功回调会根据...

    Extjs Ajax 购物车

    **ExtJS AJAX购物车详解** 在Web开发中,ExtJS是一个强大的JavaScript库,它提供了丰富的用户界面组件和数据管理功能,常用于构建复杂的桌面级应用。而Ajax技术则是实现页面无刷新更新的关键,使得用户在与网页交互...

    learning extjs 中文版 表单提交

    例如,`beforesubmit`事件可以在表单提交前进行数据验证或修改,而`success`和`failure`事件则处理服务器响应,通常用于显示成功或错误信息。 三、表单数据绑定 EXTJS表单可以与模型(Model)进行数据绑定,模型...

    extjs中的formPanel以及表单的应用

    表单验证是FormPanel 的一个重要特性。开发者可以通过设置`fieldValidators`或`validationEvent`属性来实现。当用户尝试提交表单时,ExtJS会自动检查所有字段的值是否满足验证规则。例如,我们可以通过以下方式验证...

    轻松搞定Extjs 带目录

    Extjs对分页、表单验证、表单组件的布局与初始化都提供了详细的指导,使得表单元素的开发更加高效。 表格组件GridPanel是Extjs中的亮点之一,它不仅可以展示大量数据,还支持复杂的列模型和行操作。此外,GridPanel...

    Ajax+JSON 提交数据的演示

    - **实时反馈**:例如,在用户输入时即时验证,提供动态的错误提示。 ### 5. 应用场景 - **表单提交**:用户填写表单后,无需跳转页面,即可完成提交和验证。 - **分页加载**:实现网页的无限滚动,加载更多内容...

    extjs-ajax

    ### ExtJS-Ajax 相关知识点详解 #### 一、ExtJS 概述 ##### 1.1 架构特点 - **定义**: ExtJS 是一个功能强大的客户端 JavaScript 库,用于构建现代化、响应迅速的 Web 应用。它不仅支持 AJAX 技术,还能实现丰富的...

    ajax框架之extjs2.0

    ExtJS 2.0是一个基于JavaScript的开源AJAX框架,专为构建富互联网应用程序(RIA)而设计。它提供了一套完整的组件模型、数据绑定机制、丰富的用户界面控件和强大的API,使得开发者能够轻松创建功能强大且交互性强的...

    extjs做的增删改查

    - 错误处理:提供良好的错误提示和异常处理机制,提高用户体验。 了解并熟练掌握这些知识点,开发者就能利用ExtJS和Struts2创建出高效、易用的Web应用,实现数据库的CRUD操作。在实际项目中,还需要结合具体的业务...

    资料:包括extjs2.0源码

    5. **表单元素**:EXTJS 2.0提供了丰富的表单元素,如文本框、下拉框、复选框等,支持验证和联动效果,方便构建动态表单。 6. **图表组件**:EXTJS 2.0内置了各种图表类型,如柱状图、饼图、线图等,适用于数据可视...

    EXTJS与.NET开发

    6. **EXTJS Form与.NET表单验证**:EXTJS的表单组件可以与.NET的服务器端验证机制结合,实现前后端的表单验证一致性,确保数据的准确性和安全性。 7. **EXTJS Ajax与.NET WebMethods**:EXTJS的Ajax组件可以调用...

    Extjs4登录功能+验证码+struts2

    例如,使用注解`@Valid`进行表单验证,如果验证失败,Struts2会自动将错误信息返回到前端。 在实现过程中,我们需要在Struts2的配置文件(struts.xml)中定义对应的Action映射,确保表单提交请求能够正确地路由到...

Global site tag (gtag.js) - Google Analytics