当在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传数组或对象。