ajax动态无刷新传递数组类型的数据

话不多说,先上代码

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的时候就可以传递数组参数了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值