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

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_原创

    第十七章:悬停提示与验证 113 一、悬停提示 113 二、悬停提示的用法 114 三、表单组件验证 118 四、小结 120 第十八章:FormPanel布局与初始化 121 一、布局概述 121 二、分割吧! 121 三、表单初始化 126 四、小结...

    精通JS脚本之ExtJS框架.part2.rar

    分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计进度条、设计工具栏和菜单栏、设计面板、设计表格、设计表单、设计数据表、对Ajax的支持...

    ExtJSWeb应用程序开发指南(第2版)

    4.2.2 表单验证(VType) 4.2.3 自定义VType验证 4.3 表单的提交和加载 4.3.1 Ext.form.action.Action基础 4.3.2 Ajax模式的表单数据加载 4.3.3 Ajax模式的表单数据提交 4.3.4 标准模式的表单数据提交 4.3.5 ...

    精通JS脚本之ExtJS框架.part1.rar

    分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计进度条、设计工具栏和菜单栏、设计面板、设计表格、设计表单、设计数据表、对Ajax的支持...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -MenuButton, LinkButton, Button, LinkButtonField增加ValidateTarget用来控制表单验证失败时提示对话框的显示位置。 +2010-01-06 v2.1.9 -集成Extjs最新版本v3.1.0。 -修正灰色皮肤的CSS问题。 -修正Grid...

    ExtAspNet_v2.3.2_dll

    -MenuButton, LinkButton, Button, LinkButtonField增加ValidateTarget用来控制表单验证失败时提示对话框的显示位置。 +2010-01-06 v2.1.9 -集成Extjs最新版本v3.1.0。 -修正灰色皮肤的CSS问题。 -修正Grid...

    ExtAspNet v3.1.0源码

    ExtAspNet v3.1.0源码 ExtAspNet 是一组专业的Asp.net控件库,拥有原生的AJAX支持和丰富的UI...-为Button\MenuButton\LinkButton\LinkButtonField增加ValidateMessageBox,用来控制在验证失败时是否出现提示对话框。

    传智播客SCM手把手开发文档

    声明:只有word文档,无程序源码,下不下在你~ 每步都说的很明白。 纯word文档,解释如何实现SCM系统 系统基于Struts 2+Hibernate+MySQL开发,并用到了一些前台技术。...EasyValidation 表单验证框架

    Ext Js权威指南(.zip.001

    7.4.5 数据验证及错误处理:ext.data.validations与ext.data.errors / 332 7.4.6 模型的关系:ext.data.association、ext.data.hasmanyassociation和ext.data.belongstoassociation / 334 7.4.7 管理数据模型:...

    GoodProject Maven Webapp.zip

    系统主要运用在:主要运用于系统的表单验证比如登录注册验证码以及一些需要不刷新页面的异步提交页面(在车票查询,登录注册表单验证页面使用到了,还有是一些删除操作也使用到了) 前端页面使用的jsp(Java服务端...

    RapidWebDev框架源码

    扩展模型可以让你在系统运行的时候动态的编辑字段,并且不用重新编译就可以实现用户界面的更新及CRUD操作,并且它还提供元数据管理的用户界面和asp.net动态表单的验证支持。 快速WEB架构 快速web架构是一套WebUI...

    javascript中创建对象的几种方法总结

    前言: 随着web 2.0 的兴起(最...就拿自己的经历来讲,零几年的时候,我能拿javascript写一些页面UI效果,做网站的表单验证等操作,当时觉得已经很酷了。但是换到现在,如果连XMLHttpRequest、JSON是什么都不知道,连j

    从零开始学习JQuery

    从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件 一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案, 即使你会使用jQuery也能在阅读中发现些许秘籍. 本篇文章...

    Ext 开发指南 学习资料

    顺便说说常见的Ext is not defined错误 A.4. 想把弹出对话框单独拿出来用的看这里 A.5. 想把日期选择框单独拿出来用的看这里 A.6. 听说有人现在还不会汉化ext A.7. 碰到使用ajax获得数据,或者提交数据出现乱码 A.8...

    EXT教程EXT用大量的实例演示Ext实例

    顺便说说常见的Ext is not defined错误 A.4. 想把弹出对话框单独拿出来用的看这里 A.5. 想把日期选择框单独拿出来用的看这里 A.6. 听说有人现在还不会汉化ext A.7. 碰到使用ajax获得数据,或者提交数据出现乱码...

    EXT2.0中文教程

    顺便说说常见的Ext is not defined错误 A.4. 想把弹出对话框单独拿出来用的看这里 A.5. 想把日期选择框单独拿出来用的看这里 A.6. 听说有人现在还不会汉化ext A.7. 碰到使用ajax获得数据,或者提交数据出现乱码 A.8...

Global site tag (gtag.js) - Google Analytics