前臺傳到後臺
- 序列化表單
$("#goodsBuyForm").serialize();//字符串
$("#goodsBuyForm").serializeObject();//json對象
將表單序列化爲
name1=value1&name2=value2
的形式
用在ajax請求中
params = $("#goodsBuyForm").serialize();
$.ajax({
data:param,
//data:{"params":params,"goodsSku":goodSkuId}
// 這樣想多傳幾個參數親測不行,傳到後臺的參數也無法直接映射到對象中去
})
serializeObject()基於JQuery的serializeArray()
/**
* 將表單元素序列化爲JSON對象 基於jQuery serializeArray()
*/
$.fn.serializeObject = function() {
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name] !== undefined) {//剛出現的表單name的值。爲undefined直接保存name和value
if (!o[this.name].push) {//有相同name屬性的表單,用數組保存
o[this.name] = [ o[this.name] ];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
表單序列化爲數組:數組的內容爲{}json對象,json對象有兩個鍵name和value
serializeArray不會序列化不需要提交的表單控件,跟常規的表單提交行爲是一致的。不在<form>
標籤內的表單控件不會被提交、沒有name屬性的表單控件不會被提交、帶有disabled屬性的表單控件不會被提交、沒有被選中的表單控件不會被提交。
參考博客
serializeObject()的功能更強大
後臺傳到前臺。
方式1:
@ReponseBody
註解
返回的string,integer或者map類型直接傳到頁面,通常用於ajax請求在success:function(data)中用到後臺返回的數據中。
應該是被這個註解過,就不會調用視圖解析器了吧。
如果是返回要轉向的頁面就不能用這個註解了。
//data.count 取值
/**
* 獲取購物車數量
* @param request
* @return
*/
@RequestMapping("/getCartCount")
@ResponseBody
public int getCartCount(HttpServletRequest request){
try{
MemberInfo info = (MemberInfo) request.getAttribute("consumerInfo");
info = new MemberInfo();
info.setMemberId("100007377612");//測試代碼
if(null == info) {
return 0;
}else{
int count = userGoodsCarService.count(info.getMemberId());
return count;
}
}
catch (Exception e){
return 0;
}
}
方式2:
要返回的值以鍵值對的形式存入model對象中
@RequestMapping("/linkToCartList")
public String linkToCartList(HttpServletRequest request,Model model){
model.addAttribute("shopSet", shopSet);
model.addAttribute("userGoodsCarList", userGoodsCarList);
model.addAttribute("skuIds", StringUtils.join(skuIds,";"));
model.addAttribute("cartGoodsNum", cartGoodsNum);
return "web/goods/cart/cartList";//交給視圖解析器
}
方式3:
傳JSONObejct對象的toString()方法。
JSONObject result = new JSONObject();
result.put("status", 0);
result.put("goodsWater", goodsWater);
result.put("shopGoodsPrice", shopGoodsPrice);
response.getWriter().write(result.toString());
gx工程:
var valueData = eval("(" + data.responseText + ")");
hn:
success: function (data) {
var goodsWater = data.goodsWater;
var marketInfo = data.marketInfo;//沒有使用eval將json字符串轉化爲json對象,應該是得不到數據的啊。好奇怪啊。
是因爲:
dataType:"json";//將傳過來的json型字符串轉化爲json對象
//等價爲eval("("+jsonString+")")的作用