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>

数组传递判别

在这里插入图片描述

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