某预约系统分析 > 某区公共自行车租车卡在线预约,关于如何提高成功概率
概诉
网上提交预约申请单,线下面交完成实体卡的交付和办理。
本文主要从技术角度分析预约页面,仅供初学者技术交流使用。
表单输入和校验
系统通过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);
另外:提高成功概率的主要影响因素
- 对网页资源的本地化,优化;给服务器减轻压力
- 对资源进行缓存jquery-1.11.2.min.js
- 对资源进行映射。
- 服务器测速(多服务器情况下)
- 智能DNS切换
- CDN返回缓存
定义测速机制,根据数据包路由信息确定最优服务器IP地址,直接缓存到本地hosts文件中
多服务器情况下,切换选择基于本机的最优服务器
CDN判断
结语
这个1.0版本的分析还有些技术细节有待优化.
欢迎探讨,如果您想找人帮忙:
某预约系统分析 > 某区公共自行车租车卡在线预约,关于如何提高成功概率的更多相关文章
- LCA最近公共祖先 ST+RMQ在线算法
对于一类题目,是一棵树或者森林,有多次查询,求2点间的距离,可以用LCA来解决. 这一类的问题有2中解决方法.第一种就是tarjan的离线算法,还有一中是基于ST算法的在线算法.复杂度都是O( ...
- 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 ...
- 前端公共库cdn服务推荐//提高加载速度/节省流量
前端公共库cdn服务推荐,使用可以提高js库加载速度同时也可以节省自己空间的流量,CDN加速公共库虽好,不过一定要使用靠谱的前端cdn服务提供方. 以下整理出比较靠谱的国内cdn加速服务器.排名不分先 ...
- C++版 - Lintcode 77-Longest Common Subsequence最长公共子序列(LCS) - 题解
版权声明:本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C++版 - L ...
- Luogu2161 [SHOI2009]会场预约-线段树
Solution 线段树维护 sum 表示区间内预约个数, L 表示区间最左边的预约, R 表示区间最右边的预约. $pushup$ 就是这样 : void up(int nd) { sum[nd] ...
- python抢票开发——设备预约助手实现
女朋友是药学院的,做实验时需要在特定的网站上进行设备预约,由于预约人数过多,从而导致从浏览器登录不进去或者登录进去预约失败等情况,所以我用python帮她写了一个抢位助手,让程序自动去进行位置预定,实 ...
- django 简单会议室预约(6)
后台完了现在来看前端,前端用了一个bootstrap框架,看起来能好看点 先看一下文件结构:在djapp里创建了两个文件夹templates和static templates里面是要显示的页面,sta ...
- 校准产品质量,把控出海航向,腾讯WeTest《2019中国移动游戏质量白皮书》正式开放预约
作者:wetest小编 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:https://wetest.qq.com/lab/view/483.html 每当步入一个新的年份, ...
- 数据分析侠A的成长故事
数据分析侠A的成长故事 面包君 同学A:22岁,男,大四准备实习,计算机专业,迷茫期 作为一个很普通的即将迈入职场的他来说,看到周边的同学都找了技术开发的岗位,顿觉自己很迷茫,因为自己不是那么喜欢钻 ...
随机推荐
- Linux定时任务Crontab详解
原文地址:http://edu.codepub.com/2011/0104/28518.php 今天做了个数据库的备份脚本,顺便系统得学习一下Linux下定时执行脚本的设置.Linux下的定 ...
- 【vue.js权威指南】读书笔记(第一章)
最近在读新书<vue.js权威指南>,一边读,一边把笔记整理下来,方便自己以后温故知新,也希望能把自己的读书心得分享给大家. [第1章:遇见vue.js] vue.js是什么? vue.j ...
- cordova IOS源码浅析
cordova封装了一套js和OC通信的代码,cordova.js下的iOSExex是关键的js去调原生的发起点. function iOSExec() { var successCallback, ...
- java关键字之final
final表示不能修改. final修饰的方法不能被重写, final修饰的类不能被继承并且类里的所有方法都是final,成员变量可以是final或者不是final. final修饰的成员变量不可以改 ...
- iOS,多媒体,地图相关
1.本地音频播放 2.本地视频播放 3.使用UIImagePickerController摄像头拍照,录像,照片库浏览 4.使用AVFunction,AVCaptureVideoDataOutput实 ...
- System.Web.AspNetHostingPermission 类型的权限已失败
System.Security.SecurityException: 请求“System.Web.AspNetHostingPermission, System, Version=2.0.0.0, C ...
- 如何使用抓包工具fiddler对app进行接口分析
如果你还不知道什么是抓包,点我 如果你还不知道什么是http,点它 如果你想知道什么是fiddler 什么是接口测试 正文来了.安装fiddler后,打开界面,点击tools,找到如图的options ...
- Asp.net上传文件后台通过二进制流发送到其他Url保存
实际情况一般有单独的站点存放静态文件,比如图片.office文档等.A站点的操作需要上传文件到B站点, 下面介绍一种方法通过System.Net.WebClient类的UploadData方法 . u ...
- getRemoteAddr()和getRemoteHost() 区别
System.out.println("request.getRemoteAddr(): " + request.getRemoteAddr()); System.out.prin ...
- Objective-C基础4
1.强指针:默认的情况下所有的指针都是强指针,关键字__strong 弱指针:__week关键字修饰的指针 2.ARC:编译器将自动在代码合适的地方插入retain.release.autorelea ...