今天在寫代碼的時候,碰到的問題,百度了一下,發現原來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化對象數據,當然這個數據到後臺是需要反序列化的
...
}
...})
如果傳遞的數據中屬性是對象的情況的另一種寫法:
function save() {
var data = {};
//規則數
var ruleObj = $("#rule_container tbody tr");
ruleObj.each(function (i) {
var full = parseFloat($(this).find("[name=rule_full]").val());
var cash = 0;
var isPinkage = "False";
var sortID = i + 1;
data["CouponActivityRules[" + i + "].Full"] = full;
data["CouponActivityRules[" + i + "].Coupon"] = cash;
data["CouponActivityRules[" + i + "].IsPinkage"] = isPinkage;
data["CouponActivityRules[" + i + "].SortID"] = sortID;
//ruleArr.push({ Full: full, Coupon: cash, IsPinkage: isPinkage, SortID: sortID });
})
var productArr = new Array();
for (var i = 0; i < productSelectData.length; i++) {
data["CouponProducts[" + i + "].ProductID"] = productSelectData[i].ID;
//productArr.push({ ProductID: productSelectData[i].ID });
}
data["Name"] = $("#Name").val();
data["BeginTime"] = $("#BeginTime").val();
data["EndTime"] = $("#EndTime").val();
data["ID"] = $("#ID").val()
$.ajax({
url: "/create",
data: data,
dataType: "json",
type: "post",
success: function (data) {},
error: function (data) {}, timeout: 15000,//超時
complete: function (XHR, TS) { XHR = null }//AJAX請求
});
}
傳參
List傳遞(非傳統請求),數組形式的傳法並不被接受,現在只知道一種data[“child[0].ID”]=1的寫法後臺是能夠正常接收數據的
<script>
var a = {};
a.Name = "測試";
//a.Child = {};或者a.Child = [];
//for (var i = 0; i < 10; i++) {
// a.Child[i] = {};
// a.Child[i].ID = i;
// a.Child[i].Age = i;
//}這種方式淘汰,傳到後臺的ID,Age都是0,無值;傳統方式也沒用
//for (var i = 0; i < 10; i++) {
// a["Child[" + i + "]"] = {};
// a["Child[" + i + "]"].ID = i;
// a["Child[" + i + "]"].Age = i;
//}這種方式淘汰,傳到後臺的ID,Age都是0,無值;傳統方式也沒用
for (var i = 0; i < 10; i++) {
a["Child[" + i + "].ID"] = i;
a["Child[" + i + "].Age"] = i;
}//這種方式成功,傳到後臺的ID,Age都是正常的=》即使是ajax加了traditional: true,傳統方式傳參也可以
function test() {
$.ajax({
url: "/home/test",
data: a,
dataType: "json",
type: "post",
//traditional: true,//開啓傳統模式
success: function (data) {
jsprint("正常")
},
error: function () {
jsprint("異常");
}
})
}
</script>
數組傳遞判別