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
learningever 2020-09-19
chongxiaocheng 2020-08-16
ajaxhe 2020-08-16
lyqdanang 2020-08-16
curiousL 2020-08-03
时光如瑾雨微凉 2020-07-19
坚持着执着 2020-07-16
jiaguoquan00 2020-07-07
李永毅 2020-07-05
坚持着执着 2020-07-05