最近接触到remote方法,有些细节没有掌握好,经过一番的查资料与思考。现在终于知道了这个remote方法的巧妙之处以及细节用法,接下来加以记录。
1、remote方法的接受数据Data
remote的本质是异步ajax,自然接受的数据类型可以跟ajax的类型相同,但是这里remote的源码要求我们当我们默认只需要验证当前元素的值的时候,即可以直接用以下方式
//验证身份证号唯一性
idCard:{
remote:{
url: $contextPath + '/xxx/xxx',
type: "post",
data:{idCard:function(){
return $('#noid').val();
}}
}}
}
}
其中data接受的格式key/value键值对形式为:name:function(){return $element.val()}
就能传入该元素的值
data默认传入的数据形式: element.name: element.vlaue
即: idCrad:xxxxxxxxxxxx
但是我们实际需要传入的key不是元素的name值,则覆盖即可defineKey:function(){return $element.val()}
defineKey:xxxxxxxxxxxxx
2、remote的返回数据处理
remote的返回类型只能是两种,一种是true
,一种是false
。但是我们的url请求返回的数据如果在service层不将以处理为只能输出这两种形式的话,会造成很大的影响。此时我们需要ajax的dataFilter
对原始的返回数据进行预处理操作
//假设后台请求返回的数据为0即为false,不是0就是true
idCard:{
remote:{
url: $contextPath + '/xxx/xxx',
type: "post",
data:{noid:function(){
return $('#noid').val();
}},
dateFilter:function(data,type){
if(data == 0){
return false;
}
return true;
}
}}
}
}
dataFilter
详细介绍:
类型:Function
给 Ajax 返回的原始数据的进行预处理的函数。提供 data 和 type 两个参数:data 是 Ajax 返回的原始数据,type
是调用 jQuery.ajax 时提供的 dataType 参数。函数返回的值将由 jQuery 进一步处理。arguments[0] 是 ajax 的原始响应数据,也就是 XHR.responseText,arguments[1] 是 ajax 请求参数中的 dataType ,而这个函数返回的值也就是 success 回调函数中的 responseText。
说白了dataFilter
就是在success
之前对ajax原始数据进行预处理过滤处理,当然它的执行顺序自然而然就会在success之前。那么它的具体应用的情况有哪些呢?我能想到的有以下两种
- 对后台经过加密之后的数据进行解密,之后success回调传到前端。
- 实际项目中可以使用当验证通过后进行某些操作,比如我们身份证号码通过了规则验证与唯一性验证之后,我们需要提取其中的出生年月、前六位编码用来填充出生日期与籍贯所在地(但是注意必须要return有返回)。
dateFilter:function(data,type){
if(data != 0){
fillOptionArea($('#noid'));//自动填充籍贯下拉框function
fillOptionBirth($('#noid'));//自动填出生年月下拉框function
return true;//必须有返回
}
return false;//必须有返回
}