某预约系统分析 > 某区公共自行车租车卡在线预约,关于如何提高成功概率
概诉
网上提交预约申请单,线下面交完成实体卡的交付和办理。
本文主要从技术角度分析预约页面,仅供初学者技术交流使用。
表单输入和校验
系统通过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岁,男,大四准备实习,计算机专业,迷茫期 作为一个很普通的即将迈入职场的他来说,看到周边的同学都找了技术开发的岗位,顿觉自己很迷茫,因为自己不是那么喜欢钻 ...
随机推荐
- 视觉机器学习读书笔记--------SVM方法
SVM是一种二类分类模型,有监督的统计学习方法,能够最小化经验误差和最大化几何边缘,被称为最大间隔分类器,可用于分类和回归分析.支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题, ...
- struts2所有组件
struts2所有组件(动作,结果,拦截器) 动作在框架中可作为MVC模式的模型.这个角色的主要职责是控制业务逻辑,动作使用execute()方法来实现这个功能. 这个方法中的代码应该只关注与请求相关 ...
- 使用css使textbox输入内容自动变大写
<style type="text/css"> input[type="text"] { text-transform:uppercase; } & ...
- Intellij Idea 工具在java文件中如何避免 import .*包
Intellij Idea工具在java文件中怎么避免import java.utils.*这样的导入方式,不推崇导入*这样的做法!Editor->Code Style->Java-> ...
- int型时间字符串转日期
string re ="201611"; DateTime d1 = DateTime.ParseExact(re, "yyyyMMdd", null);
- SpringMVC整合Hibernate实现增删改查之按条件查询
首先我贴出我项目的结构,只完成了条件查询的相关代码,增删改没有写. 1.新建一个动态Web工程,导入相应jar包,编写web.xml配置文件 <context-param> <par ...
- JavaSE基础第四篇
1.参数传递 2,方法的重载 方法的参数的个数.类型.顺序 跟修饰符.返回值无关 3.构造方法: return 表示当前方法执行结束,后面不能写任何语句 4工程导入 单个.java文件粘贴 ...
- vmware workstation unrecoverable error: (vmui)报错解决方法
实验室7月份刚换了电脑,之前一直用vmware来跑linux搞嵌入式开发,无论是宿舍的笔记本,还是之前用的旧台式机,都可以妥妥的跑vmware没有问题,结果换了新电脑之后,装上vmware works ...
- ThinkPHP 下如何隐藏index.php
最近一直在做孕妈团的项目,因为部署到实际项目中出现了链接打不开的情况,要默认添加index.php才能正常访问. 当时忘了是Tinkphp的URL重写模式:以后遇到相同问题,首先要想到URL重写模式. ...
- UICollectionView 自定义组头组尾的XIB方法
UICollectionView的加载方式和Tableview很像,基本上加载的方法都差不多,尤其是它的数据源的方法和代理方法基本上类似,只不过是名字上有点细微的差别而已.这里面不赘述. 1. UIC ...