某预约系统分析 > 某区公共自行车租车卡在线预约,关于如何提高成功概率
概诉
网上提交预约申请单,线下面交完成实体卡的交付和办理。
本文主要从技术角度分析预约页面,仅供初学者技术交流使用。
表单输入和校验
系统通过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岁,男,大四准备实习,计算机专业,迷茫期 作为一个很普通的即将迈入职场的他来说,看到周边的同学都找了技术开发的岗位,顿觉自己很迷茫,因为自己不是那么喜欢钻 ...
随机推荐
- 通过命令创建vue项目
环境要求: 安装有 Node.js. vue. vue-cli . 创建项目: vue init webpack projectName 进入项目,下载依赖: npm install 或者 cnpm ...
- CSS中定位和浮动对行内元素的宽高的影响
行内元素的大小是由元素里面的内容撑开的宽高决定的,就算在css中对行内元素设置width,height.行内元素也会忽略宽高的设置. 但是当行内元素使用position:absolute或者posit ...
- ios - kvo观察者示例
首先创建Person分类 #import <Foundation/Foundation.h> @interface Person : NSObject @property (nonatom ...
- mac安装paramiko
$ brew install openssl $ /usr/local/opt/openssl/bin/c_rehash $ export ARCHFLAGS="-arch x86_64&q ...
- Java网络编程之流——流、过滤器、阅读器和书写器
Java的I/O建立于流(Stream)之上.输入流读取数据:输出流写入数据.所有的输出流都有相同的基本方法来写入数据,所有输入流也使用相同的基本方法来读取数据.在创建流之后,你通常可以忽略在读写时的 ...
- 关于git自己所学到的东西
1.什么是Git(傻瓜内容跟踪器) Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目 Git 是 Linus Torvalds (Linus在1991年创建了 ...
- kindEditor完整认识 PHP上调用并上传图片说明/////////////////////////////z
最近又重新捣鼓了下kindeditor,之前写的一篇文章http://hi.baidu.com/yanghbmail/blog/item/c681be015755160b1d9583e7.html ...
- 。。。学习CSS3的第一个属性border-radius。。。
学习border-radius,感觉这个文档写的很不错: http://blog.sina.com.cn/s/blog_61671b520101gelr.html
- web 安全的前期准备哦
学习web安全 需要的软件 和 基础 基础会在以后发出来 软件 在网上都可以下 首先 你要有一款虚拟机软件 虚拟系统通过生成现有操作系统的全新虚拟镜像,它具有真实windows系统完全一样 ...
- 夺命雷公狗-----React---15--三元运算符
<!DOCTYPE> <html> <head> <meta charset="utf-8"> <title></ ...