某预约系统分析 > 某区公共自行车租车卡在线预约,关于如何提高成功概率-CarlZeng
概诉 网上提交预约申请单,线下面交完成实体卡的交付和办理。 本文主要从技术角度分析预约页面,仅供初学者技术交流使用。 表单输入和校验 系统通过2步的确认点击到达信息输入页面。 地址:/bjggzxc/TzYybk_third_1.html 验证规则: 居住地址 工作居住证号 电子邮箱 联系人姓名 性
概诉
网上提交预约申请单,线下面交完成实体卡的交付和办理。
本文主要从技术角度分析预约页面,仅供初学者技术交流使用。
表单输入和校验
系统通过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
验证代码:
1 $(function() {
2 $(‘#U_BIRTHDAY’).datetimepicker({
3 language: ‘zh-CN’,
4 minView: ‘2’, //只选择日期,不选择时间
5 format: ‘yyyy-mm-dd’,
6 startDate: ‘${yypc.ksrq}’,
7 endDate: new Date(), 8 autoclose: true , 9 todayBtn: true
10 }).on(“changeDate”, function(e){
11 // console.log($(“#applyForm”).data(‘formValidation’));
12 $(“#applyForm”).bootstrapValidator(‘revalidateField’, ‘U_BIRTHDAY’);
13 });
14
15 var validForm = $(‘#applyForm’).bootstrapValidator({
16 fields: {
17 “U_NAME”: {
18 validators: {
19 notEmpty: { //非空验证
20 message: ‘姓名不能为空!’
21 },
22 regexp: {
23 regexp: /^[a-zA-z\u4e00-\u9fa5,\.\-_]{2,}$/,
24 message: ‘只能输入中英文字符以及逗号、点、减号、下划线,且至少两个字符’
25 }
26 }
27 },
28 “U_SEX”: {
29 validators: {
30 notEmpty: { //非空验证
31 message: ‘性别不能为空,请选择!’
32 },
33 callback: {
34 message: ‘性别与身份证不匹配!’,
35 callback: function(value, validator, $field) {
36 var zjlx = $(‘select[name=U_ZJTYPE]‘).val();
37 var sfzh = $(‘input[name=U_ZJNUM]‘).val();
38 var sex=$(“input[name=’U_SEX’]:checked”).val();
39
40 if (sex != “” && zjlx == “身份证” && (sfzh.length == 18 || sfzh.length == 15)) {
41 var sexFromSfzh = “”;
42 if(sfzh.length == 18) {
43 sexFromSfzh = sfzh.substring(16, 17);
44 } else if(sfzh.length == 15) {
45 sexFromSfzh = sfzh.substring(14);
46 }
47 console.log(sexFromSfzh);
48 var sexCode = parseInt(sexFromSfzh); 49
50 if(sexCode % 2 == 0)
51 sexFromSfzh = “女”;
52 else
53 sexFromSfzh = “男”;
54
55 if(sex != sexFromSfzh) 56 return false; // or false
57 }
58 return true;
59 }
60 }
61 }
62 },
63 “U_BIRTHDAY”: {
64 validators: {
65 notEmpty: { //非空验证
66 message: ‘出生日期不能为空!’
67 },
68 date: {
69 message: ‘日期格式不正确,输入类似2011-01-01的日期!’,
70 format: ‘YYYY-MM-DD’
71 },
72 callback: {
73 message: ‘出生日期与身份证不匹配!’,
74 callback: function(value, validator, $field) {
75 var zjlx = $(‘select[name=U_ZJTYPE]‘).val();
76 var sfzh = $(‘input[name=U_ZJNUM]‘).val();
77 if (zjlx == “身份证” && (sfzh.length == 18 || sfzh.length == 15)) {
78 var birthdayFromSfzh = “”;
79 if(sfzh.length == 18) {
80 birthdayFromSfzh = sfzh.substring(6, 14);
81 } else if(sfzh.length == 15) {
82 birthdayFromSfzh = “19” + sfzh.substring(6, 12);
83 }
84 if(value.replace(/-/g,’’) != birthdayFromSfzh) 85 return false; // or false
86 }
87 return true;
88 }
89 },
90 callback: {
91 message: ‘18-60岁之间才能预约!’,
92 callback: function(value, validator, $field) {
93 var d = Date.parse(value.replace(/-/g,’/‘));
94 var date = new Date(); 95 var now = date.format(“yyyyMMdd”);
96 date.setTime(d);
97 date.addYears(18);
98 var date1 = date.format(“yyyyMMdd”); //18岁是哪天
99 date.addYears(42); 100 var date2 = date.format(“yyyyMMdd”); //60岁是哪天
101 console.log(date1); 102 console.log(date2); 103 console.log(now); 104 return (now >= date1 && now <= date2); 105 } 106 } 107 } 108 }, 109 “U_BIRTHPLACE”: { 110 validators: { 111 notEmpty: { //非空验证
112 message: ‘户口所在地不能为空!’
113 }, 114 regexp: { 115 regexp: /^[\u4e00-\u9fa5]{2,}$/, 116 message: ‘户口所在地只能输入中文,填写省市区(县)即可,最少两个汉字!’
117 } 118 }, 119 onSuccess: function(e, data) { 120 data.bv.revalidateField(‘U_ZZZNUM’); 121 } 122 }, 123 “U_ZJTYPE”: { 124 validators: { 125 notEmpty: { //非空验证
126 message: ‘证件类型不能为空,请选择!’
127 } 128 } 129 }, 130 “U_ZJNUM”: { 131 validators: { 132 notEmpty: { //非空验证
133 message: ‘证件号码不能为空!’
134 }, 135 callback: { 136 message: ‘身份证号码校验失败!’, 137 callback: function(value, validator, $field) { 138 var zjlx = $(‘select[name=U_ZJTYPE]‘).val(); 139 if (zjlx == “身份证”) 140 return IdentityCodeValid(value); 141 else
142 return true; 143 } 144 }, 145 remote: { 146 message: ‘此证件号码已经预约过,请不要重复预约!’, 147 url: ‘TzYybk_checkZjhm_1.html’, 148 type: ‘POST’, 149 // delay: 1000,
150 data: { 151 Y_PC: $(‘input[name=Y_PC]‘).val(), 152 PC_ID: $(‘input[name=PC_ID]‘).val() 153 } 154 } 155 }, 156 onSuccess: function(e, data) { 157 data.bv.revalidateField(‘U_BIRTHDAY’); 158 data.bv.revalidateField(‘U_SEX’); 159 } 160 }, 161 “U_TXPLACE”: { 162 validators: { 163 notEmpty: { //非空验证
164 message: ‘居住地址不能为空!’
165 }, 166 regexp: { 167 regexp: /^[a-zA-z0-9\u4e00-\u9fa5,, \.\-_]{5,}$/, 168 message: ‘居住地址只能输入中英文字符、数字以及逗号、点、减号、下划线,且至少五个字符’
169 } 170
171 } 172 }, 173 “U_ZZZNUM”: { 174 validators: { 175 callback: { 176 message: ‘非北京户口用户必须输入工作居住证号码,且只能输入12位数字,北京户口请在户口所在地中包含“北京”两个字。’, 177 callback: function(value, validator, $field) { 178 var hk = $(‘input[name=U_BIRTHPLACE]‘).val(); 179 if (hk != “” && hk.indexOf(“北京”) < 0 && value == “”) { 180 return false; // or false
181 } else { 182 if(value != “”) { 183 if(/^[0-9]{12}$/m.test(value)) 184 return true; 185 else
186 return false; 187 } else
188 return true; 189 } 190 } 191 } 192 } 193 }, 194 “U_PHONE”: { 195 validators: { 196 notEmpty: { //非空验证
197 message: ‘手机号不能为空!’
198 }, 199 regexp: { 200 regexp: /^[0-9]{11}$/, 201 message: ‘手机号只能是11位数字!’
202 } 203 } 204 }, 205 “U_EMAIL”: { 206 validators: { 207 notEmpty: { //非空验证
208 message: ‘电子邮箱不能为空!’
209 }, 210 regexp: { 211 regexp: /^[a-zA-Z0-9_\-.]+@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/, 212 message: ‘电子邮箱格式不正确!’
213 } 214 } 215 }, 216 “U_ZJTYPE”: { 217 validators: { 218 notEmpty: { //非空验证
219 message: ‘证件类型不能为空!’
220 } 221 } 222 }, 223 “U_U_NAME”: { 224 validators: { 225 notEmpty: { //非空验证
226 message: ‘联系人姓名不能为空!’
227 }, 228 regexp: { 229 regexp: /^[a-zA-z\u4e00-\u9fa5,\.\-_]{2,}$/, 230 message: ‘只能输入中英文字符以及逗号、点、减号、下划线,且至少两个字符’
231 } 232 } 233 }, 234 “U_U_SEX”: { 235 validators: { 236 notEmpty: { //非空验证
237 message: ‘性别不能为空!’
238 } 239 } 240 }, 241 “U_U_RELATION”: { 242 validators: { 243 notEmpty: { //非空验证
244 message: ‘与联系人的关系不能为空!’
245 }, 246 regexp: { 247 regexp: /^[\u4e00-\u9fa5]{2,}$/, 248 message: ‘与联系人的关系只能输入汉字,最少两个字符!’
249 } 250 } 251 }, 252 “U_U_TELEPHONE”: { 253 validators: { 254 notEmpty: { //非空验证
255 message: ‘联系电话为空!’
256 }, 257 regexp: { 258 regexp: /^[0-9()-]{8,}$/, 259 message: ‘联系电话只能是数字或横杠,最少8位!’
260 } 261 } 262 }, 263 “U_U_TXPLACE”: { 264 validators: { 265 notEmpty: { //非空验证
266 message: ‘联系人通讯地址不能为空!’
267 }, 268 regexp: { 269 regexp: /^[a-zA-z0-9\u4e00-\u9fa5,, \.\-_]{5,}$/, 270 message: ‘联系人通讯地址只能输入中英文字符、数字以及逗号、点、减号、下划线,且至少五个字符’
271 } 272 } 273 } 274 } 275 }) 276 .on(‘success.form.bv’, function(e) { 277 e.preventDefault(); 278 editPcSave(); 279 }); 280 })
View Code
提前准备好合格的注册/预约信息是件很重要的事情,通过代码提取然后进行自动的填写。
用一个本地库去保存合格的注册信息。
循环:提取信息,然后提交服务器。
确认提交优化
提前判断信息都通过验证以后(合格),除了用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);
View Code
另外:提高成功概率的主要影响因素
- 对网页资源的本地化,优化;给服务器减轻压力
- 对资源进行缓存jquery-1.11.2.min.js
- 对资源进行映射。
- 服务器测速(多服务器情况下)
定义测速机制,根据数据包路由信息确定最优服务器IP地址,直接缓存到本地hosts文件中3. 智能DNS切换
多服务器情况下,切换选择基于本机的最优服务器4. CDN返回缓存
CDN判断
结语
这个1.0版本的分析还有些技术细节有待优化.