Ajax传递各种数据类型(解决你传数组的头疼问题)

1.使用json数据格式

  • 传递数组
<button id="btn">点击</button>
    <script type="application/javascript">
        $(function () {
            $("#btn").on("click",function (){
           
                var nums=[1,2,3,4];
                $.ajax({
                    type:"post",
                    url: "/test",
                    contentType: "application/json; charset=utf-8",
                    data: JSON.stringify(nums),
                    success: function (result) {
                        alert(1)
                    }
                });
            });
        })
    </script>
   @RequestMapping("/test")
    @ResponseBody
    public void  test(
            @RequestBody Integer [] nums
    ){

        for (int i=0;i<nums.length;i++){
            System.out.println("第"+i+"个值为:"+nums[i]);
        }
    }
  • 传递集合
<button id="btn">点击</button>
    <script type="application/javascript">
        $(function () {
            $("#btn").on("click",function (){
                var data = [{
                    username:"zhangsan",
                    password:"123"
                },{
                    username:"lisi",
                    password:"123"
                }];

                $.ajax({
                    type:"post",
                    url: "/test",
                    contentType: "application/json; charset=utf-8",
                    data: JSON.stringify(data),
                    success: function (result) {
                        alert(1)
                    }
                });
            });
        })
    </script>
   @RequestMapping("/test")
    @ResponseBody
    public void  test(
            @RequestBody List<UserEntity> users
    ){
        users.forEach(user -> {
            System.out.println(user.toString());
        });
  }
  • 传递对象(同上)

2.不使用json格式

  • 传递数组
   @RequestMapping("/test")
    @ResponseBody
    public void  test(
            @RequestParam(value = "nums") Integer nums[]
    ){
        for (int i=0;i<nums.length;i++){
            System.out.println("第"+i+"个值为:"+nums[i]);
        }
    }
<button id="btn">点击</button>
    <script type="application/javascript">
        $(function () {
            $("#btn").on("click",function (){
                var data = [{
                    username:"zhangsan",
                    password:"123"
                },{
                    username:"lisi",
                    password:"123"
                }];
                var nums=[1,2,3,4];
                $.ajax({
                    type:"get",
                    url: "/test",
                    traditional:true, //默认false
                    data: {
                        nums:nums
                    },
                    success: function (result) {
                        alert(1)
                    }
                });
            });
        })
    </script>

traditional:是否使用传统的方式浅层序列化。 通过ajax提交数组时,会自动在所设定的参数后面增加中括号:“[]”, 导致后端spring MVC中的@RequestParam获取不到参数。解决方法: ajax请求时增加:traditional: true 就可以正常提交了。原因如下: jQuery会调用jQuery.param序列化参数,jQuery.param( obj, traditional ) ,默认的话,traditional为false,即jquery会深度序列化参数对象, 以适应如PHP和Ruby on Rails框架,但servelt api无法处理, 我们可以通过设置traditional 为true阻止深度序列化。

 

如果你不设置浅层序列化,对数组对象 应该这样设置

var arr={params:['param','param2']};
$.ajax({url:请求地址,
            data:arr,
            type:"POST",
            success:function(){
                //do something
            }
        });
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值