今天在寫代碼的時候,碰到的問題,百度了一下,發現原來AJAX傳遞List數據是可以的,之前還一直用JSON序列化(new Array()數組設置)進行傳值的。
var _list = {}; //等價於 var _list=new Object(); for (var i = 0; i < 10; i++) { _list["后台controller中的接收名字[" + i + "]"] = 值; //設置對象的key=>value鍵值對,即類似於a[0]=0的內容塞入對象_list中,對於后台接收來說,就相當於List內容了 } $.ajax({ url: '傳遞的路徑', data: _list, //直接傳_list節可以了,相當於 data: { "ids[0]":1,"ids[1]":2 }這種寫法 dataType: "json", type: "POST", success: function (data) { alert('Ok'); } });
另外的方式 數組模式
<script> var a=[]; //設置數組模式 for (var i = 0; i < 10; i++) { a[i]=i; } //var b = $.param(a, true); $.ajax({ url: "/jsaction/edit", //data:{"ids":b},這種方式我這里測試獲取到的數據個數為0,倒不是為null,也不行 dataType: "json", type: "post", data: { "ids": a },//使用這種數組方式的,得加下一句才可以,使用傳統方式 traditional: true, success: function (data) { for (var i = 0; i < data.length; i++) { console.log(data[i]); } } }) </script>
如果傳遞的數據中存在列表對象
//第一種,現在比較喜歡第一種,畢竟和后台寫法類似,而且看起來清楚 var albumsArray = []; $("#acAlbums li:not(.add)").each(function (i) { albumsArray[i] = new Object(); albumsArray[i].ImageUrl = $(this).find("img").attr("src"); albumsArray[i].Url = $(this).find("img").attr("url"); }) //第二種 var albumsArray2 = new Array(); $("#acAlbums li:not(.add)").each(function (i) { albumsArray2.push({"ImageUrl":$(this).find("img").attr("src"), "Url":$(this).find("img").attr("url")}); }) $.ajax({ data: { MenuListStr: JSON.stringify(eval(albumsArray))//嘗試了一下,直接把對象數組傳到后台,但是數據為null,也可能方式不對 ,MenuListStr2:JSON.stringify(eval(albumsArray2))//第二種方式使用Array對象,json化對象數據,當然這個數據到后台是需要反序列化的 ... } ...})
如果傳遞的數據中屬性是對象的情況的另一種寫法:

1 function save() { 2 var data = {}; 3 //規則數 4 var ruleObj = $("#rule_container tbody tr"); 5 ruleObj.each(function (i) { 6 var full = parseFloat($(this).find("[name=rule_full]").val()); 7 var cash = 0; 8 var isPinkage = "False"; 9 var sortID = i + 1; 10 data["CouponActivityRules[" + i + "].Full"] = full; 11 data["CouponActivityRules[" + i + "].Coupon"] = cash; 12 data["CouponActivityRules[" + i + "].IsPinkage"] = isPinkage; 13 data["CouponActivityRules[" + i + "].SortID"] = sortID; 14 //ruleArr.push({ Full: full, Coupon: cash, IsPinkage: isPinkage, SortID: sortID }); 15 }) 16 17 var productArr = new Array(); 18 for (var i = 0; i < productSelectData.length; i++) { 19 data["CouponProducts[" + i + "].ProductID"] = productSelectData[i].ID; 20 //productArr.push({ ProductID: productSelectData[i].ID }); 21 } 22 data["Name"] = $("#Name").val(); 23 data["BeginTime"] = $("#BeginTime").val(); 24 data["EndTime"] = $("#EndTime").val(); 25 data["ID"] = $("#ID").val() 26 $.ajax({ 27 url: "/create", 28 data: data, 29 dataType: "json", 30 type: "post", 31 success: function (data) {}, 32 error: function (data) {}, timeout: 15000,//超時 33 complete: function (XHR, TS) { XHR = null }//AJAX請求 34 }); 35 }
List傳遞(非傳統請求),數組形式的傳法並不被接受,現在只知道一種data["child[0].ID"]=1的寫法后台是能夠正常接收數據的

1 <script> 2 var a = {}; 3 a.Name = "測試"; 4 //a.Child = {};或者a.Child = []; 5 //for (var i = 0; i < 10; i++) { 6 // a.Child[i] = {}; 7 // a.Child[i].ID = i; 8 // a.Child[i].Age = i; 9 //}這種方式淘汰,傳到后台的ID,Age都是0,無值;傳統方式也沒用 10 11 //for (var i = 0; i < 10; i++) { 12 // a["Child[" + i + "]"] = {}; 13 // a["Child[" + i + "]"].ID = i; 14 // a["Child[" + i + "]"].Age = i; 15 //}這種方式淘汰,傳到后台的ID,Age都是0,無值;傳統方式也沒用 16 17 for (var i = 0; i < 10; i++) { 18 a["Child[" + i + "].ID"] = i; 19 a["Child[" + i + "].Age"] = i; 20 }//這種方式成功,傳到后台的ID,Age都是正常的=》即使是ajax加了traditional: true,傳統方式傳參也可以 21 function test() { 22 $.ajax({ 23 url: "/home/test", 24 data: a, 25 dataType: "json", 26 type: "post", 27 //traditional: true,//開啟傳統模式 28 success: function (data) { 29 jsprint("正常") 30 }, 31 error: function () { 32 jsprint("異常"); 33 } 34 }) 35 } 36 </script>