MVVM架构~knockoutjs系列之扩展ajax验证~验证输入数据是否与后台数据相等
在看这篇文章之前,你有必要先看我之前的文章,之前文章是将一个方法以参数的形式传给KO,然后返回一个真假值,去做验证,这类似于面向对象语言里的委托,在JS里我们叫它回调方法,本篇文章与前一文章不同,需要有两个参数,其一是远程方法的签名(JS方法),其二是已知要比较的数据(可能是加密后的密码数据),当用户输入文字后,它将会调用JS方法获取远程数据,以比较原数据与你输入的数据是否匹配.
知识点:以对象作为参数进行传递
ko.validation.js的扩展
//ajax相等验证
kv.rules['ajaxDataEqual'] = {
validator: function (val,params) {
var result = true;//默认为验证通过
$.when(params.ajaxMethod(val)).then(function (data) {
result = kv.utils.isEmptyVal(val) || data == kv.utils.getValue(params.otherValue); //val为空走reqired逻辑,不为空再走ajax逻辑
});
return result;
},
message: 'Two value must equal.'
};
HTML代码
<form id="form1" style="width: 800px;">
<div class="editor-label">
提现金额:
</div>
<div class="editor-field" style="width: 700px">
<input name="Money" data-bind='value: Money' />
<span class="validationError" data-bind="validationMessage:Money"></span>
</div>
<div class="editor-label">
支付密码:
</div>
<div class="editor-field" style="width: 700px">
<input name="Paypassword" data-bind='value: Paypassword' />
<span class="validationError" data-bind="validationMessage:Paypassword"></span>
</div>
<p>
<input type="button" data-bind="click:cash" value="提现" />
</p>
</form>
相关JS调用时的代码
<script type="text/ecmascript">
function getpassword(key) {
return $.ajax({
url: "/ef/GetPayPassword",
data: { key: key },
type: "get",
dataType: "json",
async: false,
success: function (data) {
return data;
}
});
}
var userWithdraw = function () { var self = this;
ko.validation.configure({//ko.validation相关配置
insertMessages: false
}); self.Money = ko.observable().extend({
min: { params: 1, message: "金额最小为1..." },
max: { params: 1000, message: "金额最大为1000..." },
required: {
params: true,
message: "请输入提现金额..."
}
}); self.Paypassword = ko.observable().extend({ ajaxDataEqual: { params: { ajaxMethod: getpassword, otherValue: "zzl123" }, message: "支付密码不正确..." },//注意,这只是个实例,说明ajaxDataEqual的用法,实现中,密码不应该保留到前端
required: {
params: true,
message: "请输入支付密码..."
}
}); self.cash = function () {
self.errors = ko.validation.group(self);
if (self.isValid()) {
alert("可以进行提现")
} else { self.errors.showAllMessages();
}
}
}
ko.applyBindings(new userWithdraw());
</script>
最后程序运行的结果

本实例可以帮助我们完成类似支付,提现等功能模块的验证工作.
对于上面的业务大家可能会有些疑惑,怎么把密码暴露到前端了,当然这只是个实例,在项目中,我们应该使用ajaxData进行真假值的验证,密码的验证应该放到后端的方法里,下面是项目中的代码
self.Paypassword = ko.observable().extend({
ajaxData: { params: confirmPassword, message: "支付密码不正确..." },
required: {
params: true,
message: "请输入支付密码..."
}
});
function confirmPassword(key) {
return $.ajax({
url: "/ef/ConfirmPassword",
data: { key: key },
type: "get",
dataType: "json",
async: false,
success: function (data) {
return data;
}
});
}
下面是C#后端代码,完成了密码的验证
/// <summary>
/// 得到用户的支付密码
/// 只返回真假值,不返回加密后的密码
/// </summary>
/// <param name="userid"></param>
/// <returns></returns>
public JsonResult ConfirmPassword(string key)
{
string oldPassword = "zzl123";//! 这个密码一般是通过当前登陆ID从数据库里查询出来的,不会暴露在前端
if (key == oldPassword)
return Json(true, JsonRequestBehavior.AllowGet);
else
return Json(false, JsonRequestBehavior.AllowGet);
}
MVVM架构~knockoutjs系列之扩展ajax验证~验证输入数据是否与后台数据相等的更多相关文章
- MVVM架构~knockoutjs系列之扩展ajax验证~验证数据是否存在
返回目录 在大部分网站里,用户名都是唯一的,即当用户注册时,如果用户输入的名字不合法,我们需要提示用户,让用户再起个新名字,而这种复杂的验证一般是通过JS来实现的,如果把它集成到ko里,那就完美了.有 ...
- MVVM架构~knockoutjs系列之为Ajax传递Ko数组对象
返回目录 一些要说的 这是一个很有意思的题目,在KO里,有对象和数组对象两种,但这两种对象对外表现都是一个function,如果希望得到他的值,需要进行函数式调用,如ko_a(),它的结果为一个具体值 ...
- MVVM架构~knockoutjs系列之表单添加(验证)与列表操作源码开放
返回目录 本文章应该是knockoutjs系列的最后一篇了,前几篇中主要讲一些基础知识,这一讲主要是一个实际的例子,对于一个对象的添加与编辑功能的实现,并将项目源代码公开了,共大家一起学习! knoc ...
- MVVM架构~Knockoutjs系列之验证机制的引入
返回目录 对于Knockoutjs本身来说,没有提供验证模块,不过,有第三方的扩展,就像你为jquery库作extensions一样,这讲中我将介绍一个Knockout插件扩展,knockout.va ...
- MVVM架构~knockoutjs系列之级联select
返回目录 对于下拉列表框的绑定在之前的knockoutjs文章中已经介绍过,今天主要说一下级联的select,事实上,在knockoutjs里,是以数据绑定为中心的,而数据是以面向对象为前提的,而对于 ...
- MVVM架构~knockoutjs系列之验证信息自定义输出~再续
返回目录 对于一个项目的表单验证,方式有很多,效果也有很多,具体使用哪种完成取决于产品这边,产品让你用什么,你就要用什么,而做为开发人员,我们要做的就是"整理近可能多的架构方式",这样才可以自由的应变 ...
- MVVM架构~knockoutjs系列之为validation.js扩展minLength和maxLength
返回目录 为什么要对minLength和maxLength这两个方法进行扩展呢,是因为这样一个需求,在用户注册时,可以由用户自己决定他们输入的字符,中文,英文,数字均可,这样做了之后,使用户的体验更好 ...
- MVVM架构~knockoutjs系列之验证信息自定义输出
返回目录 这个文章非常重要,也是非常必要的,在我们进行项目开发时,后台无所谓,对样式无要求,而网站前台来说,对样式要求严格,你的验证信息都是前台设计好的,所以,不能使用knockoutjs自带的了,我 ...
- MVVM架构~knockoutjs系列之验证信息自定义输出~续
返回目录 上一讲中,我以一个实际中的例子说明了knockoutjs的自定义验证功能,在使用过程中,出现了一个问题,当然了不是问题,只是一种需求,上一讲中自定义验证的表现是:当页面加载后,自动显示有问题 ...
随机推荐
- 给自己立下一个巨大的flag
[BZOJ1861][BZOJ3224] [BZOJ2733][BZOJ1056] [BZOJ2120][BZOJ3673] [BZOJ1833][BZOJ1026] [BZOJ3209][BZOJ1 ...
- comet4j
简介 准备工作 下载服务端jar文件 下载客户端js文件 修改服务器配置文件 在web.xml中加载Comet4J框架 客户端使用简介 JS.Engine.start方法 JS.Engine.stop ...
- ExecutorService中submit和execute的区别(转)
在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动.调度.管理线程的一大堆API了.在Java5以后,通过Executor来启动线程比用Thread的start()更好.在新特征中 ...
- oracle中用户删除不了,ORA-01940提示 “无法删除当前已连接用户”
Oracle删除用户的提示无法删除当前已连接用户两种解决方法如下: 1.先锁定用户.然后查询进程号,最后删除对应的进程.在删除对应的用户 SQL>alter user XXX account l ...
- C#实现HttpPost提交文件
先建立一个WebApplication Web.config <?xml version="1.0" encoding="utf-8"?> < ...
- 关于webapp的一点思考
早上上班路上碰到发传单推广app的小MM被上司训斥,忽然想起一个问题,现在的nativeapp推广成本到底多高?能不能用浏览器访问app的方式降低这个成本. 现在很多app采用壳+web内容的方式,但 ...
- Bootstrap 栅格系统
1.简介 Bootstrap内置了一套响应式.移动设备优先的流式栅格系统,随着屏幕设备或视口(viewport)尺寸的增加,系统会自动分为最多12列.它包含了易于使用的预定义classe,还有强大的m ...
- 【转载】Bandits for Recommendation Systems (Part I)
[原文链接:http://engineering.richrelevance.com/bandits-recommendation-systems/.] [本文链接:http://www.cnblog ...
- 嵌入式linux开发环境构建
2.1硬件环境构建 2.1.1主机与目标板结合的交叉开发模式 在主机上编辑.编译软件,然后再目标办上运行.验证程序. 对于S3C2440.S3C2410开发板,进行嵌入式Linux开发时一般可以分为以 ...
- Eclipse下Android开发错误之Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace
升级了Android版本后,在运行应用时提示: [2013-11-27 10:37:35 - Dex Loader] Unable to execute dex: java.nio.BufferOve ...