Ajax传递复杂参数到服务器端的方法

我们大概都知道,使用Ajax传递简单参数到服务器端(SpringMVC)的方法,如下:

$.ajax({
    type : "POST",
    url : CONFIG.mec_otm.order + "/cancel",
    data : {
        "results" : "cmower",
    },
    dataType : "json",
    success : function(json) {
    }
});

但如果想要传递一个像List<SelfOrder>这样的复杂对象(一个 java.util.List 中放了自定义对象com.cmower.database.entity.selforder.SelfOrder)呢?

怎么办呢?
想一想,可以在Ajax传递参数的时候把复杂对象转成JSON字符串,然后在服务器端获取JSON字符串后再转成List<SelfOrder>
好像有道理,是吧?

那具体怎么做呢?
先来看客户端代码,我们假设有一个datatables的Table,支持多选

// 获取datatables选择的项目,支持多选,因此获取的结果为一个数组
var _getSelects = function() {
    var results = [];
    self_order_table.rows({
        selected : true
    }).data().each(function(selfOrder, i) {
        var result = {};
        result["scode"] = selfOrder.scode;
        result["id"] = selfOrder.id;
        results[i] = result;
    });
    return results;
};

$("#orderBtn").click(function(event) {
    var results = _getSelects();

    $.ajax({
        type : "POST",
        url : CONFIG.mec_otm.order + "/cancel",
        data : {
            "results" : JSON.stringify(results),//转成json字符串
        },
        dataType : "json",
        success : function(json) {

    });

    return false;
});

然后服务器端获取的方法也很简单:

@RequestMapping("cancel")
public ModelAndView cancel() {
    String jsonStr = getPara("results");
    if (StringUtils.isEmpty(jsonStr)) {
        throw new OrderException("请选择要撤单的项目");
    }

    List<SelfOrder> list = JSON.parseArray(jsonStr, SelfOrder.class);

}

可以利用fastjson(JSON.parseArray)对json字符串转成目标的复杂对象。

 

上一篇:Spark任务报错Total size of serialized results of 19 tasks (1069.2 MB) is bigger than spark.driver.max...


下一篇:python将变量保存成本地文件以及读取