关联上一篇文章。
说明:上一篇文章写的是从前端页面删除Bootstrap Table表格中数据遇到的问题。由于表格数据是从前端向后台发送ajax请求,然后后台从本地json文件中取出数据,再显示到前端的,因此一旦刷新页面,用上一篇文章的方法删掉的表格数据又会出现。因此,下一步是从前端发出ajax请求,请服务器将本地json文件中的数据删除,这样刷新页面也不会出现已删除数据了。
思路:将前端选中的行的索引(可能选中多行,因此写成了索引数组),用ajax发送到后台,后台读取本地json文件,将读到的数据转化为JS对象,借助索引删除前端选中的行数据。后台处理思路参考了(照抄了)这位大佬的文章
问题:我试图把数组直接放到ajax的post请求体中(因为我以为json格式必须是数组里带对象的形式),然后把contentType设置成了"text/html",把dataType设置为"text",其实就是在瞎写,反正后台要么是undefined要么是空的。后来改回用json格式传输,就解决了,查看了一下请求体,发现json传输到后台看着就是一个数组。咨询了前辈后发现,产生问题的原因其实和我第二篇文章一样,因为后台无法解析传输过来的数据类型,需要借助中间件,解析json类型的数据可以引用官网的中间件(可以看一下第二篇文章),而text/html传输类型比较少见,可能需要自己写程序去解析数据,具体的我也不懂,欢迎大家指正!
前端用ajax传输数据的代码:
//请求后台删除数据
$.ajax({
url:"http://127.0.0.1:8081/removeDeptData",
type:'POST',
data:JSON.stringify(index),
dataType:'json',
contentType:"application/json",
success:function(data){
alert(data);
}
});
后台服务器处理请求的代码:
//basedata页面 接收departmentExcel需要删除的数据行的索引,并从departmentdata.json文档中删除
app.post('/removeDeptData', function(req, res){
let response = req.body.sort(function(a,b) {return b-a}); //获取索引数组,并降序排列
fs.readFile('./public/departmentdata.json', function(err, data){ //读取文件
if(err)
return console.error(err);
let newData = data.toString(); //以字符串形式读取文件中的数据
newData = JSON.parse(newData); //将数据转化为json对象
response.forEach(element => { //遍历索引数组
newData.splice(element, 1); //根据索引删除json数组中的数据(若之前没有对索引数组排序,此处会漏删数据)
});
fs.writeFile('./public/departmentdata.json', JSON.stringify(newData, null, "\t"), function(err){ //将新json数组重新写入文件
if(err)
console.error(err);
console.log("删除数据成功");
});
});
});
用来解析json数据类型的引用:
app.use(express.json());
app.use(express.urlencoded({extended:true}));
app.use('/public', express.static('public'));