概诉

网上提交预约申请单,线下面交完成实体卡的交付和办理。

本文主要从技术角度分析预约页面,仅供初学者技术交流使用。

表单输入和校验

系统通过2步的确认点击到达信息输入页面。

地址:/bjggzxc/TzYybk_third_1.html

验证规则:

字段名 字段ID 校验规则1 验证规则2 验证规则3 验证规则4
姓名 U_NAME 非空验证 只能输入中英文字符以及逗号、点、减号、下划线,且至少两个字符  
性别 U_SEX 非空验证 性别与身份证不匹配    
出生日期 U_BIRTHDAY 非空验证 日期格式不正确,输入类似2011-01-01的日期! 出生日期与身份证不匹配 18-60岁之间才能预约!
户口所在地 U_BIRTHPLACE 非空验证 户口所在地只能输入中文,填写省市区(县)即可,最少两个汉字!  
证件类型 U_ZJTYPE 非空验证      
证件号 U_ZJNUM 非空验证 身份证号码校验失败,IdentityCodeValid 此证件号码已经预约过,请不要重复预约! 校验出生日期 和 性别

居住地址

U_TXPLACE 非空验证 居住地址只能输入中英文字符、数字以及逗号、点、减号、下划线,且至少五个字符  

工作居住证号

U_ZZZNUM   非北京户口用户必须输入工作居住证号码,且只能输入12位数字,北京户口请在户口所在地中包含“北京”两个字。  
手机号 U_PHONE 非空验证 手机号只能是11位数字!    

电子邮箱

U_EMAIL 非空验证 电子邮箱格式不正确!    

联系人姓名

U_U_NAME 非空验证 只能输入中英文字符以及逗号、点、减号、下划线,且至少两个字符  

性别

U_U_SEX 非空验证      

与联系人的关系

U_U_RELATION 非空验证 与联系人的关系只能输入汉字,最少两个字符!    
联系电话 U_U_TELEPHONE 非空验证 联系电话只能是数字或横杠,最少8位!    

通讯地址

U_U_TXPLACE 非空验证 联系人通讯地址只能输入中英文字符、数字以及逗号、点、减号、下划线,且至少五个字符  
选择办卡地点 U_CARD_ADDRESS 非空验证      
  Y_PC        
  PC_ID        

验证代码:

 $(function() {
$('#U_BIRTHDAY').datetimepicker({
language: 'zh-CN',
minView: '2', //只选择日期,不选择时间
format: 'yyyy-mm-dd',
startDate: '${yypc.ksrq}',
endDate: new Date(),
autoclose: true ,
todayBtn: true
}).on("changeDate", function(e){
// console.log($("#applyForm").data('formValidation'));
$("#applyForm").bootstrapValidator('revalidateField', 'U_BIRTHDAY');
}); var validForm = $('#applyForm').bootstrapValidator({
fields: {
"U_NAME": {
validators: {
notEmpty: { //非空验证
message: '姓名不能为空!'
},
regexp: {
regexp: /^[a-zA-z\u4e00-\u9fa5,\.\-_]{2,}$/,
message: '只能输入中英文字符以及逗号、点、减号、下划线,且至少两个字符'
}
}
},
"U_SEX": {
validators: {
notEmpty: { //非空验证
message: '性别不能为空,请选择!'
},
callback: {
message: '性别与身份证不匹配!',
callback: function(value, validator, $field) {
var zjlx = $('select[name=U_ZJTYPE]').val();
var sfzh = $('input[name=U_ZJNUM]').val();
var sex=$("input[name='U_SEX']:checked").val(); if (sex != "" && zjlx == "身份证" && (sfzh.length == 18 || sfzh.length == 15)) {
var sexFromSfzh = "";
if(sfzh.length == 18) {
sexFromSfzh = sfzh.substring(16, 17);
} else if(sfzh.length == 15) {
sexFromSfzh = sfzh.substring(14);
}
console.log(sexFromSfzh);
var sexCode = parseInt(sexFromSfzh); if(sexCode % 2 == 0)
sexFromSfzh = "女";
else
sexFromSfzh = "男"; if(sex != sexFromSfzh)
return false; // or false
}
return true;
}
}
}
},
"U_BIRTHDAY": {
validators: {
notEmpty: { //非空验证
message: '出生日期不能为空!'
},
date: {
message: '日期格式不正确,输入类似2011-01-01的日期!',
format: 'YYYY-MM-DD'
},
callback: {
message: '出生日期与身份证不匹配!',
callback: function(value, validator, $field) {
var zjlx = $('select[name=U_ZJTYPE]').val();
var sfzh = $('input[name=U_ZJNUM]').val();
if (zjlx == "身份证" && (sfzh.length == 18 || sfzh.length == 15)) {
var birthdayFromSfzh = "";
if(sfzh.length == 18) {
birthdayFromSfzh = sfzh.substring(6, 14);
} else if(sfzh.length == 15) {
birthdayFromSfzh = "19" + sfzh.substring(6, 12);
}
if(value.replace(/-/g,'') != birthdayFromSfzh)
return false; // or false
}
return true;
}
},
callback: {
message: '18-60岁之间才能预约!',
callback: function(value, validator, $field) {
var d = Date.parse(value.replace(/-/g,'/'));
var date = new Date();
var now = date.format("yyyyMMdd");
date.setTime(d);
date.addYears(18);
var date1 = date.format("yyyyMMdd"); //18岁是哪天
date.addYears(42);
var date2 = date.format("yyyyMMdd"); //60岁是哪天
console.log(date1);
console.log(date2);
console.log(now);
return (now >= date1 && now <= date2);
}
}
}
},
"U_BIRTHPLACE": {
validators: {
notEmpty: { //非空验证
message: '户口所在地不能为空!'
},
regexp: {
regexp: /^[\u4e00-\u9fa5]{2,}$/,
message: '户口所在地只能输入中文,填写省市区(县)即可,最少两个汉字!'
}
},
onSuccess: function(e, data) {
data.bv.revalidateField('U_ZZZNUM');
}
},
"U_ZJTYPE": {
validators: {
notEmpty: { //非空验证
message: '证件类型不能为空,请选择!'
}
}
},
"U_ZJNUM": {
validators: {
notEmpty: { //非空验证
message: '证件号码不能为空!'
},
callback: {
message: '身份证号码校验失败!',
callback: function(value, validator, $field) {
var zjlx = $('select[name=U_ZJTYPE]').val();
if (zjlx == "身份证")
return IdentityCodeValid(value);
else
return true;
}
},
remote: {
message: '此证件号码已经预约过,请不要重复预约!',
url: 'TzYybk_checkZjhm_1.html',
type: 'POST',
// delay: 1000,
data: {
Y_PC: $('input[name=Y_PC]').val(),
PC_ID: $('input[name=PC_ID]').val()
}
}
},
onSuccess: function(e, data) {
data.bv.revalidateField('U_BIRTHDAY');
data.bv.revalidateField('U_SEX');
}
},
"U_TXPLACE": {
validators: {
notEmpty: { //非空验证
message: '居住地址不能为空!'
},
regexp: {
regexp: /^[a-zA-z0-9\u4e00-\u9fa5,,  \.\-_]{5,}$/,
message: '居住地址只能输入中英文字符、数字以及逗号、点、减号、下划线,且至少五个字符'
} }
},
"U_ZZZNUM": {
validators: {
callback: {
message: '非北京户口用户必须输入工作居住证号码,且只能输入12位数字,北京户口请在户口所在地中包含“北京”两个字。',
callback: function(value, validator, $field) {
var hk = $('input[name=U_BIRTHPLACE]').val();
if (hk != "" && hk.indexOf("北京") < 0 && value == "") {
return false; // or false
} else {
if(value != "") {
if(/^[0-9]{12}$/m.test(value))
return true;
else
return false;
} else
return true;
}
}
}
}
},
"U_PHONE": {
validators: {
notEmpty: { //非空验证
message: '手机号不能为空!'
},
regexp: {
regexp: /^[0-9]{11}$/,
message: '手机号只能是11位数字!'
}
}
},
"U_EMAIL": {
validators: {
notEmpty: { //非空验证
message: '电子邮箱不能为空!'
},
regexp: {
regexp: /^[a-zA-Z0-9_\-.]+@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/,
message: '电子邮箱格式不正确!'
}
}
},
"U_ZJTYPE": {
validators: {
notEmpty: { //非空验证
message: '证件类型不能为空!'
}
}
},
"U_U_NAME": {
validators: {
notEmpty: { //非空验证
message: '联系人姓名不能为空!'
},
regexp: {
regexp: /^[a-zA-z\u4e00-\u9fa5,\.\-_]{2,}$/,
message: '只能输入中英文字符以及逗号、点、减号、下划线,且至少两个字符'
}
}
},
"U_U_SEX": {
validators: {
notEmpty: { //非空验证
message: '性别不能为空!'
}
}
},
"U_U_RELATION": {
validators: {
notEmpty: { //非空验证
message: '与联系人的关系不能为空!'
},
regexp: {
regexp: /^[\u4e00-\u9fa5]{2,}$/,
message: '与联系人的关系只能输入汉字,最少两个字符!'
}
}
},
"U_U_TELEPHONE": {
validators: {
notEmpty: { //非空验证
message: '联系电话为空!'
},
regexp: {
regexp: /^[0-9()-]{8,}$/,
message: '联系电话只能是数字或横杠,最少8位!'
}
}
},
"U_U_TXPLACE": {
validators: {
notEmpty: { //非空验证
message: '联系人通讯地址不能为空!'
},
regexp: {
regexp: /^[a-zA-z0-9\u4e00-\u9fa5,,  \.\-_]{5,}$/,
message: '联系人通讯地址只能输入中英文字符、数字以及逗号、点、减号、下划线,且至少五个字符'
}
}
}
}
})
.on('success.form.bv', function(e) {
e.preventDefault();
editPcSave();
});
})

提前准备好合格的注册/预约信息是件很重要的事情,通过代码提取然后进行自动的填写。

用一个本地库去保存合格的注册信息。

循环:提取信息,然后提交服务器。

确认提交优化

提前判断信息都通过验证以后(合格),除了用editPcSave中的ajaxSubmit来提交信息以外,如下:

function submitToSrv(){
$('#applyForm').ajaxSubmit({
type : "post",
url : "TzYybk_save_1.html",
beforeSubmit : function() {
$("button").attr("disabled", true);
},
success : function(responseText, statusText, xhr, $form) {
var response = $.parseJSON(responseText);
if(response.status=="ok") {
console.log(response.uid);
document.location="TzYybk_success_1.html?uid=" + response.uid;
} else {
alert(response.message);
}
},
error : function(request, textStatus, e) {
$("button").attr("disabled", false);
}
});
}; setInterval("submitToSrv()", 5000);

另外:提高成功概率的主要影响因素

  1. 对网页资源的本地化,优化;给服务器减轻压力
    1. 对资源进行缓存jquery-1.11.2.min.js
    2. 对资源进行映射。
  2. 服务器测速(多服务器情况下)
  3. 定义测速机制,根据数据包路由信息确定最优服务器IP地址,直接缓存到本地hosts文件中

  4. 智能DNS切换
  5. 多服务器情况下,切换选择基于本机的最优服务器

  6. CDN返回缓存
  7. CDN判断

结语

这个1.0版本的分析还有些技术细节有待优化.

欢迎探讨,如果您想找人帮忙:

某预约系统分析 > 某区公共自行车租车卡在线预约,关于如何提高成功概率的更多相关文章

  1. LCA最近公共祖先 ST+RMQ在线算法

    对于一类题目,是一棵树或者森林,有多次查询,求2点间的距离,可以用LCA来解决.     这一类的问题有2中解决方法.第一种就是tarjan的离线算法,还有一中是基于ST算法的在线算法.复杂度都是O( ...

  2. PAT Advanced 1018 Public Bike Management (30) [Dijkstra算法 + DFS]

    题目 There is a public bike service in Hangzhou City which provides great convenience to the tourists ...

  3. 前端公共库cdn服务推荐//提高加载速度/节省流量

    前端公共库cdn服务推荐,使用可以提高js库加载速度同时也可以节省自己空间的流量,CDN加速公共库虽好,不过一定要使用靠谱的前端cdn服务提供方. 以下整理出比较靠谱的国内cdn加速服务器.排名不分先 ...

  4. C++版 - Lintcode 77-Longest Common Subsequence最长公共子序列(LCS) - 题解

    版权声明:本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C++版 - L ...

  5. Luogu2161 [SHOI2009]会场预约-线段树

    Solution 线段树维护 sum 表示区间内预约个数, L 表示区间最左边的预约, R 表示区间最右边的预约. $pushup$ 就是这样 : void up(int nd) { sum[nd] ...

  6. python抢票开发——设备预约助手实现

    女朋友是药学院的,做实验时需要在特定的网站上进行设备预约,由于预约人数过多,从而导致从浏览器登录不进去或者登录进去预约失败等情况,所以我用python帮她写了一个抢位助手,让程序自动去进行位置预定,实 ...

  7. django 简单会议室预约(6)

    后台完了现在来看前端,前端用了一个bootstrap框架,看起来能好看点 先看一下文件结构:在djapp里创建了两个文件夹templates和static templates里面是要显示的页面,sta ...

  8. 校准产品质量,把控出海航向,腾讯WeTest《2019中国移动游戏质量白皮书》正式开放预约

    作者:wetest小编 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:https://wetest.qq.com/lab/view/483.html 每当步入一个新的年份, ...

  9. 数据分析侠A的成长故事

    数据分析侠A的成长故事 面包君  同学A:22岁,男,大四准备实习,计算机专业,迷茫期 作为一个很普通的即将迈入职场的他来说,看到周边的同学都找了技术开发的岗位,顿觉自己很迷茫,因为自己不是那么喜欢钻 ...

随机推荐

  1. css中很有用的属性

    有些css属性很实用,但不常用也就被忘记. 这里纪录了自己在项目中用过的一些. html,body{ -webkit-tap-highlight-color:transparent; } 这个的用途是 ...

  2. Swift:闭包

    一.闭包的介绍 闭包表达式(Closure Expressions) 尾随闭包(Trailing Closures) 值捕获(Capturing Values) 闭包是引用类型(Closures Ar ...

  3. 配置 Docker 加速器(Docker Hub Mirror)

    Docker 加速器是什么,我需要使用吗? 使用 Docker 的时候,需要经常从官方获取镜像,但是由于显而易见的网络原因,拉取镜像的过程非常耗时,严重影响使用 Docker 的体验.因此 DaoCl ...

  4. web app上传图片

    很就很久以前,web app上传图片需要通过cordova插件,那时候好像还叫phonegap. 后来一个html标签就可以了 <input type="file" clas ...

  5. chrome新版安装flash控件失败解决方法

    今天chrome打开后出现插件过期,之后更新一直安装失败 度娘找到一个方法: 1.下载flash最新版for chrome : https://fpdownload.macromedia.com/pu ...

  6. ms-sql关联表操作

    1.创建数据库employee : create database employee;2.创建员工表EMP:use employee;create table EMP( id int,sex varc ...

  7. Java内存区域与内存溢出异常

    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”. Java将内存控制的权利交给了Java虚拟机,一旦出现内存泄露和溢出问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会成 ...

  8. js 斐波那契数列(兔子问题)

    对于JS初学者来说,斐波那契数列一直是个头疼的问题,总是理不清思路. 希望看完这篇文章之后会对你有帮助. 什么是斐波那契数列 : 答: 斐波那契数列,又称黄金分割数列.因数学家列昂纳多·斐波那契(Le ...

  9. 与资源库同步时,我的svn报错 Previous operation has not finished; run 'cleanup' if it was interrupted

    解决办法:选择你的项目,右键,小组(Team),刷新或清理(Refresh or Clean)即可.

  10. 【001:C# 中 get set 简写存在的陷阱】

    如下代码: public class Age { private int ageNum ; public int AgeNum { get{ return this.ageNum; } set{ th ...