博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVVM架构~knockoutjs系列之扩展ajax验证~验证数据是否存在
阅读量:6969 次
发布时间:2019-06-27

本文共 1497 字,大约阅读时间需要 4 分钟。

在大部分网站里,用户名都是唯一的,即当用户注册时,如果用户输入的名字不合法,我们需要提示用户,让用户再起个新名字,而这种复杂的验证一般是通过JS来实现的,如果把它集成到ko里,那就完美了.有了这个想法,我开始尝试它,相信一定可以成功的!

起初在设计时出现了很多问题,如ajax异步问题,延时处理问题,ajax返回值问题等等,经过几次失败后,在总结了相关知识后,终于设计出来了一个不错的扩展,即 ajaxData验证方式.

扩展ko.validation.js代码

kv.rules['ajaxData'] = {        validator: function (val, ajaxMethod) {            var result = true;            $.when(ajaxMethod(val)).then(function (data) {                result = kv.utils.isEmptyVal(val) || data; //val为空走reqired逻辑,不为空再走ajax逻辑            });            return result;        },        message: 'Please enter info is no corrent.'    };

HTML代码

function existUser(name) {            return $.ajax({ //必须加return才可以将它返回                url: "/ef/IsNotExist?name=" + name,                type: "get",                dataType: "json",                async: false,                success: function (data) {                    return data;                }            });        }

调用方式

self.UserName = ko.observable().extend({                minLength: 2,                maxLength: { params: 30, message: "名称最大长度为30个字符" },                required: {                    params: true,                    message: "请输入名称"                },                ajaxData: {                    params: existUser,                    message: "用户已经存在"                }            });

运行后的效果如图

最后要说明的一点是,目前ajax只能使用同步方式,因为在ko.validation内部有一个机制,如果程序没有返回,那么验证会返回false,即验证失败,如对于异步请求来说,它不会阻塞当前线程的执行,所以,它会直接输出false,而不走我们的验证程序.

转载于:https://www.cnblogs.com/lori/p/3740882.html

你可能感兴趣的文章
使用Redis构建电商网站
查看>>
抽象类
查看>>
Tomcat目录结构
查看>>
使用sql语言操作数据库里面的表
查看>>
jmeter 添加监控windows硬件资源使用情况的方法
查看>>
Hibernate ORM框架——项目一:Hibernate事务的生命周期,不建议使用openSession而改造...
查看>>
As Easy As A+B
查看>>
元类编程-- 实现orm,以django Model为例
查看>>
pipenv 管理虚拟环境
查看>>
Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图
查看>>
Dynamics CRM2011 通过DeveloperToolkit在VS中部署遇到的问题
查看>>
css3 text-shadow
查看>>
struts 2读书笔记-----struts2的开发流程
查看>>
项目 08 WebSocket
查看>>
C# 模拟Http/Https请求框架类
查看>>
【记录】VMware解决网络找不到服务器的问题
查看>>
springmvc的过滤器和拦截器
查看>>
jQuery.each(object, [callback])数组对象操作--jQuery 对象访问 $().each(callback)
查看>>
树的存储结构 - 数据结构和算法41
查看>>
c3中基本动画
查看>>