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]
相关推荐
kentrl 2020-11-10
结束数据方法的参数,该如何定义?-- 集合为自定义实体类中的结合属性,有几个实体类,改变下标就行了。<input id="add" type="button" value="新增visitor&quo
ajaxyan 2020-11-09
zndy0 2020-11-03
学留痕 2020-09-20
Richardxx 2020-11-09
learningever 2020-09-19
chongxiaocheng 2020-08-16
ajaxhe 2020-08-16
lyqdanang 2020-08-16
curiousL 2020-08-03
TONIYH 2020-07-22
时光如瑾雨微凉 2020-07-19
83510998 2020-07-18
坚持着执着 2020-07-16
jiaguoquan00 2020-07-07
李永毅 2020-07-05
坚持着执着 2020-07-05