国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

jQuery的ajax 方法提交多個對象數組問題 C# traditional $.param

2019-11-17 02:03:59
字體:
來源:轉載
供稿:網友
jQuery的Ajax 方法提交多個對象數組問題 C# traditional $.param

當用$.ajax()向后臺提交參數時,如果參數中數組的話一般在后臺會用List<T>接收;但老是不成功如下面代碼

var arr1=[{ "aa": "1", "bb": "2" }, { "aa": "3", "bb": "4"}];var arr2=[{ "aa": "1", "bb": "2" }, { "aa": "3", "bb": "4"}];function addUser(){        $.ajax({            url:'UserAdd',            data:{list1:arr1,list2:arr2},            type:'post',            success:function(msg){                if(msg=='1'){                    console.log('添加成功');                }else{                    console.log('添加失敗')                }            }        });    }

用Fiddler 監測之后發覺數據變成啦

list1[0][aa]=1&list1[0][bb]=2&list1[1][aa]=3&list1[1][bb]=4&list2[0][aa]=1&list2[0][bb]=2&list2[1][aa]=3&list2[1][bb]=4

C#中能識別的數組應該是這樣的格式

list1[0].aa=1&list1[0].bb=2&list1[1].aa=3&list1[1].bb=4&list2[0].aa=1&list2[0].bb=2&list2[1].aa=3&list2[1].bb=4

在網上查找資料之后了解到ajax post之前會用因為jQuery需要調用jQuery.param序列化參數,我們來看下jquery源碼

//在ajax()方法中,對json類型的數據進行了$.param()處理if ( s.data && s.PRocessData && typeof s.data !== "string" ) {    s.data = jQuery.param( s.data, s.traditional );}//param方法中if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {        // Serialize the form elements        jQuery.each( a, function() {            add( this.name, this.value );        });    } else {        // If traditional, encode the "old" way (the way 1.3.2 or older        // did it), otherwise encode params recursively.        for ( prefix in a ) {            buildParams( prefix, a[ prefix ], traditional, add );        }    }

找到原因之后就好辦啦

首先,traditional為false,我們可以通過設置traditional 為true阻止深度序列化

先寫一個數組轉為對象的方法:

            Array.prototype.serializeObject = function (lName) {                var o = {};                $t = this;                for (var i = 0; i < $t.length; i++) {                    for (var item in $t[i]) {                        o[lName+'[' + i + '].' + item.toString()] = $t[i][item].toString();                    }                }                return o;            };

var arr1=[{ "aa": "1", "bb": "2" }, { "aa": "3", "bb": "4"}];var arr2=[{ "aa": "1", "bb": "2" }, { "aa": "3", "bb": "4"}];function addUser(){        $.ajax({            url:'UserAdd',            data:$.param(arr1.serializeObject("list1"))+"&"+$.param(arr2.serializeObject("list2"),    //手動把數據轉換拼接            type:'post',            traditional:true,    //這里必須設置            success:function(msg){                if(msg=='1'){                    console.log('添加成功');                }else{                    console.log('添加失敗')                }            }        });    }

C#后臺接收代碼

    public class Test    {        public int aa{ get; set; }        public int bb{ get; set; }    }        public ActionResult UserAdd( List<Test> list1, List<Test> list2)        {                        return Json(amm);        }

這樣一來問題就解決啦!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 哈密市| 本溪| 正蓝旗| 鄄城县| 商河县| 集贤县| 龙岩市| 抚松县| 抚宁县| 凤冈县| 扎赉特旗| 永善县| 乳山市| 鄂尔多斯市| 多伦县| 郸城县| 六盘水市| 丘北县| 东兴市| 交城县| 眉山市| 东港市| 囊谦县| 郴州市| 屏边| 巩义市| 门源| 正蓝旗| 大城县| 鄄城县| 商都县| 体育| 合阳县| 小金县| 东莞市| 新河县| 津市市| 冕宁县| 沾益县| 张家口市| 阿巴嘎旗|