如何在Servlet中获取前端AJAX提交的复选框选中值数组?
问题根因
- 你AJAX请求的参数结构嵌套错误:你把
delbox数组包在了object字段下,请求实际发送的参数名是object[delbox][],而非你预期的delbox,所以Servlet拿不到对应参数 - 你调用的
JSON.stringify(array)没有赋值给变量,完全没有生效 - jQuery发送GET请求传递数组时,默认会给参数名追加
[]后缀,也会导致getParameterValues("delbox")匹配不上
方案1:直接传递数组参数(无需解析JSON,最简单)
JS端修改
把你的AJAX部分改成如下代码,去掉多余嵌套,同时设置traditional: true让jQuery不追加[]后缀:
function getboxvalues(){ var array = []; $("input:checkbox[name=delbox]:checked").each(function() { array.push($(this).val()); }); console.log(array); $.ajax({ url: 'Deletestudent', dataType: 'json', data: { delbox: array // 直接传delbox作为参数名,不要包object }, traditional: true, // 关键配置:禁止jQuery给数组参数加[]后缀 type: 'GET' }); }
Servlet端修改
保持你现有代码即可,request.getParameterValues("delbox")就能正常拿到数组:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String[] idlistString = request.getParameterValues("delbox"); // 后续直接操作idlistString即可 response.getWriter().append("Served at: ").append(request.getContextPath()); }
方案2:传递JSON字符串解析
如果需要传递更复杂的结构可以用这个方案:
JS端修改
把数组序列化为JSON字符串作为单个参数传递:
function getboxvalues(){ var array = []; $("input:checkbox[name=delbox]:checked").each(function() { array.push($(this).val()); }); var delboxJson = JSON.stringify(array); // 把序列化结果赋值给变量 console.log(array); $.ajax({ url: 'Deletestudent', dataType: 'json', data: { delbox: delboxJson }, type: 'GET' }); }
Servlet端修改
拿到字符串后用JSON库解析为数组即可:
// 需要先引入Jackson或者Gson等JSON解析库,以下用Jackson为例 import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String delboxStr = request.getParameter("delbox"); ObjectMapper objectMapper = new ObjectMapper(); List<String> idList = objectMapper.readValue(delboxStr, new TypeReference<List<String>>() {}); // 后续直接操作idList即可 response.getWriter().append("Served at: ").append(request.getContextPath()); }
内容的提问来源于stack exchange,提问作者dany allaw
相关产品推荐
相关产品推荐

