项目场景:
XXX仓库货物进出记录清单之记录员添加、查找、修改、删除(谨慎使用)【增删改查】问题描述:
前面我们说到了登录(注册)中的bug,在记录人员进行清单的添加、查找、修改、删除时,在记录员填写信息时,出现错误信息也进行了清单的添加、查找、修改(错误信息也发送了ajax请求),在记录员做这些前我们的程序是需要做一些逻辑判断,不能出现错误信息,这里我们就用简单的人员简单信息清单举例,在清单中人员姓名不能出现字母、数字、非法字符等(这里按照中国人人名来,后面同理【请杠精注意不要说外国人名哦 ,^ _ ^】),性别不能是除了‘男’、‘女’汉字的其它汉字、字母、数字等等。我们已查询为例,这里因为逻辑比较多。
在使用查询时我能通过其中一项查询、两项查询和多项查询。
数据代码:
//分类查询
$('.chaxunbtn').on('click',function(){
// 查询面板隐藏 分页出现
select();
$('.fenye').css({display:'block'});
$('.onbtn').attr({disabled:false}).css({background:'gre'});
$('.chaxun').css({display:'none'});
var objarr = {
name : $('.Name').val(),
age : $('.Age').val() ,
sex : $('.Sex').val()
}
function sex(){
if(objarr.sex == '男'){
return '0';
}else if(objarr.sex == '女'){
return '1';
}else{
return '';
}
}
var sexname = sex();
// console.log(objarr);
if(objarr.name == '' && objarr.age == "" && objarr.sex == ""){
$(".content").html('');
}else{
$('.Name').val('');
$('.Age').val('');
$('.Sex').val('');
$.ajax({
type: "GET",
url: "http://101.37.175.185:3000/index_getdata",
data: {
uname: uName
},
dataType: 'JSON',
success: function (data) {
var obj = data;
// console.log(letdata);
var str = "";
function Str(){
if(i >=(10*(x-1))&&i <(10*x) &&i<=obj.data.length){
str += `<ul data= "${obj.data[i].pid}">
<li>${obj.data[i].name}</li>
<li>${obj.data[i].sex == 0 ? '男' : '女'}</li>
<li>${obj.data[i].age}</li>
<li>${obj.data[i].mail}</li>
<li>${obj.data[i].phone}</li>
<li><input class="del" type="button" value="删除" />
<input class="xiu" type="button" value="修改" /></li>
</ul>`;
}
}
var namearr =[];
var sexarr = [] ;
var agearr =[];
for (var i in obj.data) {
if(objarr.name ==''){
namearr[i] = obj.data[i].name;
}else{
namearr[i] = objarr.name;
}
if(objarr.sex ==''){
sexarr[i] = obj.data[i].sex;
}else{
sexarr[i] = sexname;
}
if(objarr.age ==''){
agearr[i] = obj.data[i].age;
}else{
agearr[i] = objarr.age;
}
if((obj.data[i].name == namearr[i])&& (sexarr[i] == obj.data[i].sex)&&(agearr[i] == obj.data[i].age)){
Str();
letdata.push(obj.data[i]);
}
}
$(".content").html(str);
}
});
}
})
原因分析:
通过分析这是和登录、注册时一样的逻辑错误,因为验证是否为空了,所以就发送请求。而我们在这里也是需要进行多次逻辑判断,因为少了步骤所以会出现没有通过验证时,错误的数据也会发生程序请求导致我们能成功操作。解决方案:
通过代码分析我们可以明显看到在ajax请求前的逻辑少了判断,同理我们只需在是否全部非空判断过后进行更严格的正则判断,第一步验证是否全部为空,第二步非空通过后验证是否通过单项、双项或多项查找,所以在单项查找时其它项为空必须通过,两项查找时同理,通过精确查找时则需要全部通过验证。 注意:因为在使用查询时我能通过其中一项查询、两项查询和多项查询,所以要多次判断。 代码://分类查询
$('.chaxunbtn').on('click',function(){
// 查询面板隐藏 分页出现
// select();
var objarr = {
name : $('.Name').val(),
age : $('.Age').val() ,
sex : $('.Sex').val()
}
function sex(){
if(objarr.sex == '男'){
return '0';
}else if(objarr.sex == '女'){
return '1';
}else{
return '';
}
}
var sexname = sex();
//验证非空
if(objarr.name == '' && objarr.age == "" && objarr.sex == ""){
$('#contents').css({display:'block'});
$('.chaxun').css({display:'none'});
// select()
}else{
//通过非空验证后
if(regname.test(objarr.name) || objarr.name == ""){
if(regsex.test(objarr.sex) || objarr.sex == ""){
if(regage.test(objarr.age) || objarr.age == ""){
$.ajax({
type: "GET",
url: "http://101.37.175.185:3000/index_getdata",
data: {
uname: uName
},
dataType: 'JSON',
success: function (data) {
var obj = data;
// console.log(letdata);
var str = "";
function Str(){
if(i >=(10*(x-1))&&i <(10*x) &&i<=obj.data.length){
str += `<ul data= "${obj.data[i].pid}">
<li>${obj.data[i].name}</li>
<li>${obj.data[i].sex == 0?'男':'女'}</li>
<li>${obj.data[i].age}</li>
<li>${obj.data[i].mail}</li>
<li>${obj.data[i].phone}</li>
<li><input class="del" type="button" value="删除" />
<input class="xiu" type="button" value="修改" /></li>
</ul>`;
}
}
var namearr =[];
var sexarr = [] ;
var agearr =[];
for (var i in obj.data) {
if(objarr.name ==''){
namearr[i] = obj.data[i].name;
}else{
namearr[i] = objarr.name;
}
if(objarr.sex ==''){
sexarr[i] = obj.data[i].sex;
}else{
sexarr[i] = sexname;
}
if(objarr.age ==''){
agearr[i] = obj.data[i].age;
}else{
agearr[i] = objarr.age;
}
if((obj.data[i].name == namearr[i])&& (sexarr[i] == obj.data[i].sex)&&(agearr[i] == obj.data[i].age)){
Str();
letdata.push(obj.data[i]);
}
}
$(".content").html(str);
}
});
$('.Name').val('');
$('.Age').val('');
$('.Sex').val('');
$('.chaxun').css({display:'none'});
$('.anniu').css({display:'none'});
$(".fanhui").css({display:'block'});
$('.fenye').css({display:'block'});
}else{
$('.Age1').eq(0).text('年龄不符合规范,只能为数字').css({color:'red'})
}
}else{
$('.Sex1').eq(0).text('性别不符合规范,只能是男或女').css({color:'red'})
}
}else{
$('.Name1').eq(0).text('姓名不符合规范').css({color:'red'})
}
}
})