1. 程式人生 > >Ajax傳遞複雜引數到伺服器端的方法

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字串轉成目標的複雜物件。