Ajax传递数组乱码,layUI批量删除时乱码

本文介绍了在使用LayUI进行批量删除操作时遇到的500错误问题,原因是Ajax请求参数序列化方式不正确。通过设置Ajax的`traditional`属性为`true`,使得数组参数以传统方式提交,从而解决了后台接收数据的问题。现在后台可以使用`getParameterValues`或直接接收Integer数组来获取值。这个问题的解决方案对于前端与后端交互处理数组参数具有参考价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当在LayUI中进行批量删除时候,使用了数组进行传值,后台总响应500,无法接收数据。

于是看了一下请求的参数,发现多了一些编码,如下图:
在这里插入图片描述
原因是:Ajax中少了traditional:true,参数。添加参数如下图:

var ids = [];
for(var i=0;i<checkStatus.data.length;i++){
   ids.push(checkStatus.data[i].id);
}
$.ajax({
   type: "POST",
   url: '/student/deleteStudentMany',
   data: {ids:ids},
   traditional:true,
   success: function (data) {
       layer.closeAll('loading');
       if (data.code == 1) {
           layer.msg('删除成功!', {icon: 1, time: 2000, shade: 0.2});
           location.reload(true);
       } else {
           layer.msg('删除失败!', {icon: 2, time: 3000, shade: 0.2});
       }
   }
})

添加后,请求的参数就正常了。

在这里插入图片描述
具体原因:

traditional默认值是false。
当提交的参数是数组( {ids:[value,value,value]} )时,
如果traditional是false话,则提交时会是"ids[]=value&ids[]=value"
如果traditional是true时,则提交时会是"ids=value&ids=value"

设置为true后,后台就能用下面两种方法获得值了。
方法一:
String[] ids=request.getParameterValues("ids");
方法二:
@RequestMapping(value = "/deleteStudent")
@ResponseBody
public void deleteStudent(Integer[] ids) {}

官方文档的解释如下(来源网络):
traditional
类型:Boolean
如果你想要用传统的方式来序列化数据,那么就设置为 true。
Set this to true if you wish to use the traditional style of param serialization.

简而言之:有了这个属性才可以让ajax传数组或对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值