JS AJAX傳遞List數組到後臺(對象)

今天在寫代碼的時候,碰到的問題,百度了一下,發現原來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>

數組傳遞判別

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章