话不多说,先上代码
html页面:
<c:forEach var="ScheduleGroup" items="${ScheduleGroupList}">
<tr id="${ScheduleGroup.scheduleGroupId}">
<td>
<div class="checkbox">
<label><input type="checkbox" name="checkbox" value="${ScheduleGroup.scheduleGroupId}" /></label>
</div>
</td>
</tr>
</c:forEach>
本页面是多个复选框,每个复选框都有对应的id,通过ajax将多选的id放进一个数组中,通过ajax传递到后台。
var scheduleGroupId=[];
$("input[name='checkbox']:checked").each(function(){
scheduleGroupId.push($(this).val());
});//将所选中的复选框的id值push到数组中
$.ajax({
url:"deleteScheduleGroup",
type:"post",
dataType:"json",
async : false,
cache : false,
traditional: true,
data:{"scheduleGroupId":scheduleGroupId},
success:function(msg){
for(var i=0;i<scheduleGroupId.length;i++){
var id=scheduleGroupId[i];
$("#"+id).remove();
}
}
});
下面是ajax中各个参数的作用,常用的参数有:
url: 所要传递的后台地址
data: 所要传递的数据
dataType: 所要传递的数据类型
type: 传递方式 一般为post或者get
success: 传递成功 一般会接一个function(msg){}作为回调函数,
error: 传递失败,也可有回调函数
cache: 是否缓存,类型为Boolean。默认值: true,dataType 为 script 和 jsonp 时默认为 false。设置为 false 将不缓存此页面。
async: 是否异步传递,类型:Boolean。默认值: true。默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。需要注意的是,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。因为本次所要传递的内容较少所以可以用同步。
traditional: 是否传统方式序列化数据,类型:Boolean
如果你想要用传统的方式来序列化数据,那么就设置为 true。
这里着重说traditional属性,默认的话,traditional为false,即jquery会深度序列化参数对象。以适应如PHP和Ruby on Rails框架,
但servelt api无法处理。我们可以通过设置traditional 为true阻止深度序列化,然后序列化结果如下:
p: [“123”, “456”, “789”] => p=123&p=456&p=456;
举例:
一般的,可能有些人在一个参数有多个值的情况下,可能以某个字符分隔的形式传递,比如页面上有多个checkbox:
$.ajax{
url:"xxxx",
data:{
p: "123,456,789"
}
}
在后台获取参数后再分隔,这种做法有很大弊端,试问如果某一个参数值中出现了分隔符所使用的字符,会出现后台获取的参数将与实际情况不符.
将代码改为:
$.ajax{
url:"xxxx",
data:{
p: ["123", "456", "789"]
}
}
在java后台是无法取到参数的,因为jQuery需要调用jQuery.param序列化参数,
jQuery.param( obj, traditional )。
所以讲traditional设置为true的时候就可以传递数组参数了