zoukankan      html  css  js  c++  java
  • jQuery $.ajax传递数组的traditional参数传递必须true 对象的序列化

    数组类型参数传递:

      若一个请求中包含多个值,如:(test.action?tid=1&tid=2&tid=3),参数都是同一个,只是指定多个值,这样请求时后台会发生解析错误,应先使用 tradititonal 格式化

    复制代码
    $.ajax({
        type:"post",
        url:"test.action",
        data:{
            tid:[1,2,3]
        },
        traditional:true,
        ……
    });
    复制代码

      起初我认为traditional:true,可有可无,但是后来不用traditional的时候,发现后台无法获取selectUsers的值,那么可以肯定的是traditional默认值是false。
      当提交的参数是数组( {selectUsers:[value,value,value]} ),如果是false的话,则提交时会是"selectUsers[]=value&selectUsers[]=value";如果设置成true,则提交时会是"selectUsers=value&selectUsers=value",这样后台就能用String[] ids=request.getParameterValues("selectUsers"); 获取到值
      官方文档的解释如下:traditional   类型:Boolean
      如果你想要用传统的方式来序列化数据,那么就设置为 true。(底层原理其实就是设置param()方法的traditional参数为true
      Set this to true if you wish to use the traditional style of param serialization

    1、前台jquery

    var rows = $("#table-javascript").bootstrapTable("getSelections");
    for (var i=0;i<rows.length;i++){
    if(rows[i].orderStatus!="CANCELED"){
    mif.showErrorMessageBox("只能删除已取消的订单!");
    return;
    }else {
    ids.push(rows[i].id);
    }
    }

    $.ajax({
    url:url,
    type:'post',
    dataType:'json',
    traditional: true,//注意,此处传数组到后台,必须设置为true
    cache: false,
    data:{
    "ids":ids
    },
    success:function (obj) {
    if(obj.success){
    mif.showOkMessageBox("删除成功");
    $table.bootstrapTable("refresh");
    }
    }

    2、后台controller代码

    @RequestMapping(value = "/batchDeleMemberPayOrder.do")
    public Result<MemberPayOrder> batchDeleMemberPayOrder(@RequestParam List<Long> ids)

    总结1:当ajax传的data数据是数组时,必须设置traditional参数,并为true,前台提交数据的 格式为"selectUsers=value&selectUsers=value" ,然后后台才可以通过List<Long> ids 接收到,

    如果不设置,前台传过来的数据格式为"selectUsers[]=value&selectUsers[]=value",后台采用list解析会报错:报错如下,

    "Failed to instantiate [java.util.List]: Specified class is an interface"

    总结2:

      当ajax传的data数据是数组时,必须设置traditional参数,并为true,然后后台才可以通过request.getParameterValues()方法获取到数据,否则会解析出错。

  • 相关阅读:
    HUB_mysql学习笔记
    SQL学习笔记
    java_cmd_命令行
    JavaScript_2016_8_28
    linux mysql 安装配置
    solr 添加索引
    solr 查询 实例分析
    solr update接口常用方法
    solr schema.xml文档节点配置
    solr4.5安装配置 linux+tomcat6.0+mmseg4j-1.9.1分词
  • 原文地址:https://www.cnblogs.com/Andrew520/p/9584889.html
Copyright © 2011-2022 走看看