Ajax傳遞複雜引數到伺服器端的方法
阿新 • • 發佈:2018-11-01
我們大概都知道,使用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字串轉成目標的複雜物件。