Jquery validation remote 验证的缓存问题解决方法


Posted in Javascript onMarch 25, 2014

最近项目中一直在用 Jquery validation 做校验,结合bootstrap 和 jquery form 感觉效果不错。但是remote验证的缓存问题让我头痛了很久,几乎就像放弃这款插件了。

举例说明:

现有学校,年级,班级实体

在同一学校下不能有相同的年级,在同一年级下不能有相同的班级

以同一学校下不能有相同年级为例,在验证的时候用remote方式:

JS

"gradeId" : { 
required : true, 
min : 0, 
remote: { 
url: "gradeManager-checkGrade.action", 
type: "post", 
dataType: "json", 
data: { 
'gradeId' : function() { 
return $("#gradeId").val(); 
}, 
'schoolId' : function() { 
return $("#schoolId").val(); 
} 
} 
} 
}

HTML
<div class="control-group"> 
<label class="control-label" for="schoolId">学校</label> 
<div class="controls"> 
<s:select name="schoolId" list="schools" listKey="schoolId" 
listValue="schoolName" headerKey="-1" headerValue="请选择学校"></s:select> 
</div> 
</div> <div class="control-group"> 
<label class="control-label" for="gradeId">年级</label> 
<div class="controls"> 
<s:select name="gradeId" list="grades" listKey="gradeId" 
listValue="gradeName" headerKey="-1" headerValue="请选择年级"></s:select> 
</div> 
</div>

现在有 测试学校1、测试学校2,两所学校,其中测试学校1下有 小学一年级、小学二年级两个年级

理论上,在新增年级的时候,如果学校选择测试学校1,那么选择小学一年级、小学二年级时remote验证会报错“该年级已经存在”

事实上,第一次操作时,结果也是正确的
Jquery validation remote 验证的缓存问题解决方法 
但是如果此时再更改学校,比如选择测试学校2,由于缓存问题,validation插件并不会重新进行新的remote验证而会直接返回上一次验证的结果,于是就有了如下蛋疼的错误
Jquery validation remote 验证的缓存问题解决方法 
这还不是最难让人接受的,更严重的问题时如果先选择了测试学校2、和小学一年级,remote验证通过,此时再选择测试学校1,remote验证依然通过,如此一来同一学校下不能有相同年级的验证就等于失败了

于是进行了各种查询解决方法

有种说法是,在remote中加入 "cache: false",但是实测并没有解决问题

尝试过在学校下拉框上绑定onchange事件清空gradeId的值,依然无法解决问题

查阅了validation的api,发现 .valid() 方法可以主动触发验证,但是由于缓存问题,remote依然没有重新验证

还查看了validation的源码,发现其中有个previousValue这个东西,如果有值就会直接return 前一次的验证结果
Jquery validation remote 验证的缓存问题解决方法 
于是尝试了一下清空这个值

$("#schoolId").change(function(){ 
$("#gradeId").removeData("previousValue"); 
});

成功解决问题
Javascript 相关文章推荐
JavaScript 字符编码规则
May 04 Javascript
jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)
Oct 20 Javascript
Javascript实现的Map集合工具类完整实例
Jul 31 Javascript
详解jQuery移动页面开发中的ui-grid网格布局使用
Dec 03 Javascript
图解js图片轮播效果
Dec 20 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
Feb 02 Javascript
JS+Canvas绘制时钟效果
Aug 20 Javascript
Node.js 异步异常的处理与domain模块解析
May 10 Javascript
JS实现自定义状态栏动画文字效果示例
Oct 12 Javascript
vue实现2048小游戏功能思路详解
May 09 Javascript
微信小程序module.exports模块化操作实例浅析
Dec 20 Javascript
使用vuex存储用户信息到localStorage的实例
Nov 11 Javascript
js操作输入框提示信息且响应鼠标事件
Mar 25 #Javascript
jquery动态更换设置背景图的方法
Mar 25 #Javascript
jquery队列queue与原生模仿其实现方法分享
Mar 25 #Javascript
jquery下拉select控件操作方法分享(jquery操作select)
Mar 25 #Javascript
jquery的each方法使用示例分享
Mar 25 #Javascript
提取jquery的ready()方法单独使用示例
Mar 25 #Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
Mar 25 #Javascript
You might like
php自动注册登录验证机制实现代码
2011/12/20 PHP
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
2014/02/18 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
2014/10/30 PHP
php 伪造ip以及url来路信息方法汇总
2014/11/25 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
PHP使用ActiveMQ实例
2018/02/05 PHP
用javascript实现的图片马赛克后显示并切换加文字功能
2007/04/21 Javascript
JS创建自定义表格具体实现
2014/02/11 Javascript
jquery获取select选中值的方法分析
2015/12/22 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
利用jquery实现下拉框的禁用与启用
2016/12/07 Javascript
angular2倒计时组件使用详解
2017/01/12 Javascript
NodeJs实现定时任务的示例代码
2017/12/05 NodeJs
详解VUE-地区选择器(V-Distpicker)组件使用心得
2018/05/07 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
2019/04/28 Javascript
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
2020/12/04 Javascript
[02:49]2018DOTA2亚洲邀请赛主赛事决赛日战况回顾 Mineski鏖战5局夺得辉耀
2018/04/10 DOTA
python re.sub()替换正则的匹配内容方法
2019/07/22 Python
基于Html5实现的语音搜索功能
2019/05/13 HTML / CSS
JD Sports丹麦:英国领先的运动时尚零售商
2020/11/24 全球购物
阿尔卡特(中国)的面试题目
2014/08/20 面试题
迟到检讨书900字
2014/01/14 职场文书
自动化专业职业生涯规划书范文
2014/01/16 职场文书
最新大学生创业计划书写作攻略
2014/04/02 职场文书
答谢会策划方案
2014/05/12 职场文书
优秀少先队工作者事迹材料
2014/05/13 职场文书
食品安全宣传标语
2014/06/07 职场文书
努力工作保证书
2015/02/28 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书
Python实战之OpenCV实现猫脸检测
2021/06/26 Python
浅析Django接口版本控制
2021/06/26 Python
python实现会员管理系统
2022/03/18 Python
app场景下uniapp的扫码记录
2022/07/23 Java/Android