Ajax实现Map对象和对象数组传递

Ajax实现Map对象传递

js代码

//变更保存
function changeSave() {
    var $formParams = $('#form-info').serializeJson();
    $.ajax({
        url: ctx + '/conf/changeSave',
        type: "POST",
        data: $formParams,
        traditional: true, //传统方式
        success: function(data) {
            console.log(data)
            top.layer.msg("变更成功!",{time: 1500});
        },
        error: function() {
            top.layer.msg("程序异常!",{time: 1500});
        }
    });
}



/**
 * 将form里面的内容序列化成json
 * 相同的checkbox用分号拼接起来
 * @param {dom} 指定的选择器
 * @param {obj} 需要拼接在后面的json对象
 * @method serializeJson
 * */
$.fn.serializeJson=function(otherString){
  var serializeObj={},
    array=this.serializeArray();
  	$(array).each(function(){
    if(serializeObj[this.name]){
      serializeObj[this.name]+=';'+this.value;
    }else{
      serializeObj[this.name]=this.value;
    }
  });

Controller层代码

@RequestMapping("/changeSave")
@ResponseBody
public void changeSave(@RequestParam Map<String,String> map) {
	confService.changeSave(map);
}


Ajax实现对象数组传递

js代码

//变更保存
function changeSave() {
    var $formParams = $('#form-info').serializeJson();
    var formParamsArr = objToArray($formParams)
    $.ajax({
        url: ctx + '/conf/changeSave',
        type: "POST",
        data: {confJson:JSON.stringify(formParamsArr)},
        traditional: true,
        success: function(data) {
            console.log(data)
            top.layer.msg("变更成功!",{time: 1500});
        },
        error: function() {
            top.layer.msg("程序异常!",{time: 1500});
        }
    });
}

/**
 * josn对象转对象数组
 * 入参格式:{maxAmount:'10000',uploadAmount:'20000'}
 * 出参格式:[{key:'maxAmount',value:'10000'},{key:'uploadAmount',value:'20000'}]
 */
function objToArray(obj) {
    var arr = []
    for(var i in obj){
        var o = {};
        o.key = i;
        o.vlaue = obj[i];
        arr.push(o)
    }
    return arr
}

Controller层代码

@RequestMapping("/changeSave")
@ResponseBody
public void changeSave(String confJson) {
	List<Conf> confList = (List<Conf>)JsonUtils.toList(confJson,Conf.class);
	confService.changeSave(confList);
}

JsonUtils工具类代码

package cn.com.json.utils;

import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.util.List;

/**
 * @ClassName: JsonUtils
 * @Description: Json工具类
 */
public class JsonUtils {

    private static Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();

    /**
     * @Description: 对象转json字符串
     * @Title: toJson
     * @param  Object
     * @return String
     */
    public static String toJson(Object src) {
        return gson.toJson(src);
    }

    /**
     * @Description: json转Object
     * @Title: toObject
     * @param json
     * @param className
     * @return Object
     */
    public static Object toObject(String json, Class<?> className) {
        return JSON.parseObject(json, className);
    }

    /**
     * @Description: json转List
     * @Title: toList
     * @param json
     * @param className
     * @return List
     */
    public static List<?> toList(String json, Class<?> className) {
        return JSON.parseArray(json, className);
    }

}


下面是整理的提交方式

ajax传递数组

前台代码

var deleteNum= [];//定义要传递的数组
deleteNum.push("1");
deleteNum.push("2");
deleteNum.push("3");//向数组中添加元素
 
$.ajax({
    type:"post",
    url:"deleteNum.do",
    data:{deleteNum:deleteNum},
    traditional: true,//必须指定为true
    success:function(data){
        if(data.success){
            deleteNum = [];
        }
    }
});

后台代码

 public ActionResult deleteNum(String[] deleteNum){
    //这个时候已经得到了deleteNum数组值
    return Json(new {status=1});
 }

自定义对象接收的方式

 /**
    * 自定义对象,用于接受参数
    * 表单列表对象 用于接收form表单提交的对象数组
  */
  public class FormListObject {
       private ArrayList<User> userlist;
       public ArrayList<User> getUserlist() {
           return userlist;
       }
       public void setUserlist(ArrayList<User> userlist) {
           this.userlist= userlist;
       }
  }

public AjaxResult saveOrUpdateUser(FormListObject list){
    List<User> userlist = list.getUserlist(); //你会看到你想要的
}


ajax传递对象

js代码

  var scatalog = new Object();
    scatalog.id =3;
    scatalog.pId = 5;
    var scontent = new Object();
    scontent.id=6;
    scontent.catalogId =66;
    $.ajax({
        type : 'POST',
        url : 'testSendValue/sendValue',
        contentType : 'application/json;charset=utf-8', //设置请求头信息
        dataType:"json",
        data :JSON.stringify({scatalog:scatalog,scontent:scontent}),//scatalog和scontent名称必须和TestSendValueDto 类的这两个类的属性名保持一致
        success: function(data){
            alert(data);
        } 
});

Controller层代码

@RequestMapping("sendValue")
@ResponseBody
public String test(@RequestBody TestSendValueDto dto){
 		return "succeed";
}

//自定义对象
public class TestSendValueDto {
    public StandardCatalog scatalog;
    public StandardContent scontent;

    public StandardCatalog getScatalog() {
        return scatalog;
    }
    public void setScatalog(StandardCatalog scatalog) {
        this.scatalog = scatalog;
    }
    public StandardContent getScontent() {
        return scontent;
    }
    public void setScontent(StandardContent scontent) {
        this.scontent = scontent;
    }
}

ajax传递数组

js代码

/**
 * 传数组:如果你的array没有push任何东西,只是new了一下,这样是无法进到后台的
 * 如果值为空,那么传值之前一定要加上array=[null],否则进不了后台
 */
 var array = new Array();
 array.push(1);
 array.push(2);
 $.ajax({
	type:"post",
	url:"testSendValue/sendValue",
	data:{array:array,id:3},
	traditional: true,//传统方式
	success:function(data){
   	    if(data.success){
           alert(data.success);
   	    }
    }
 });

Controller层代码

/*
* 后台接收@RequestParam里的名字("array[]")必须和你传的一样
* /
@RequestMapping("sendValue")
@ResponseBody
public String test(@RequestParam("array[]") List<String> array1, int id){
     return "succeed";
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nizhengjia888

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值