jq中使用Ajax方法提交多个对象数组的问题

当用$.ajax()向后台提交参数时,如果参数中数组的话一般在后台会用List<T>接收;但老是不成功如下面代码

var arr1 = [{ "Name": "Tom", "Age": 17 }, { "Name": "Jim", "Age": 22}];
var arr2 = [{ "Name": "Tom2", "Age": 18 }, { "Name": "Jim2", "Age": 24}];

    $(function () {
        $.ajax({
            url: ‘/Home/UserAdd‘,
            data: {list1:arr1,list2:arr2},
            success: function (msg) {
                if (msg == ‘1‘) {
                    console.log(‘添加成功‘);
                } else {
                    console.log(‘添加失败‘);
                }
            }
        });

    })

用Fiddler 监测之后发觉数据变成啦

list1[0][Name]:Tom
list1[0][Age]:17
list1[1][Name]:Jim
list1[1][Age]:22
list2[0][Name]:Tom2
list2[0][Age]:18
list2[1][Name]:Jim2
list2[1][Age]:24

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;
    };
$.ajax({
            url: ‘/Home/UserAdd‘,
            data: $.param(arr1.serializeObject("list1")) + "&" + $.param(arr2.serializeObject("list2")),
            success: function (msg) {
                if (msg == ‘1‘) {
                    console.log(‘添加成功‘);
                } else {
                    console.log(‘添加失败‘);
                }
            }
        });

C#后台接收代码

public string UserAdd(List<User> list1, List<User> list2)
{
    return "1";
}
public class User
{
   public string Name { get; set; }
   public int Age { get; set; }
}

这样一来问题就解决啦!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c#
, 数组
, 数据
, 对象
, 参数
this
ajax提交对象数组、ajax提交json数组对象、jq ajax提交form表单、jq ajax提交表单、jq ajax提交,以便于您获取更多的相关知识。

时间: 2024-10-27 00:16:45

jq中使用Ajax方法提交多个对象数组的问题的相关文章

详解jquery中$.ajax方法提交表单_jquery

复制代码 代码如下: function postdata(){                        //提交数据函数       $.ajax({                                //调用jquery的ajax方法           type: "POST",                       //设置ajax方法提交数据的形式           url: "ok.php",                   

JQUERY中的ajax方法怎样通过JSONP进行远程调用

 这一节主要演示下在JQUERY中的ajax方法怎样通过JSONP进行远程调用,需要的朋友可以参考下 关于JSONP的概念和为什么要使用JSONP网上已经有很多教程,这一节主要演示下在JQUERY中的ajax方法怎样通过JSONP进行远程调用    首先介绍下$.ajax的参数  type:请求方式 GET/POST  url:请求地址  async:布尔类型,默认为true 表示请求是否为异步,如果为false表示为同步.  dataType:返回的数据类型  jsonp:传递给请求处理程序或

jquery中的ajax方法怎样通过JSONP进行远程调用_jquery

关于JSONP的概念和为什么要使用JSONP网上已经有很多教程,这一节主要演示下在JQUERY中的ajax方法怎样通过JSONP进行远程调用 首先介绍下$.ajax的参数 type:请求方式 GET/POST url:请求地址 async:布尔类型,默认为true 表示请求是否为异步,如果为false表示为同步. dataType:返回的数据类型 jsonp:传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback) jsonpCallback:自定义的js

在jquery中的ajax方法怎样通过JSONP进行远程调用_jquery

关于JSONP的概念和为什么要使用JSONP网上已经有很多教程,这一节主要演示下在JQUERY中的ajax方法怎样通过JSONP进行远程调用 首先介绍下$.ajax的参数 type:请求方式 GET/POST url:请求地址 async:布尔类型,默认为true 表示请求是否为异步,如果为false表示为同步. dataType:返回的数据类型 jsonp:传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback) jsonpCallback:自定义的js

编码-jQuery中的ajax方法获取到json数据中文会乱码

问题描述 jQuery中的ajax方法获取到json数据中文会乱码 接口如下:http://cre.mix.sina.com.cn/api/finance/topstock_display这个接口 默认返回是 gbk的编码 支持 oe=utf-8,但是xtmlhttprequest 返回的数据默认的字符编码是utf-8,后台说用oe=utf转换,求解... 解决方案 首先你这不是json,所以你需要从服务器语言上把数据转换成json再去传到前端:其次,你要把后台脚本改成utf-8编码,不知道你用

jquery中页面Ajax方法$.load的功能使用介绍_jquery

load语法 $(".selector").load("url", function(responseText, statusText, xmlhttprequest)); 可以做到加载一个页面的时候,如果发生错误,根据statusText给出的状态,显示对应的提示,这对用户来说非常重要. 例子,load post 代码如下 复制代码 代码如下: <div id=btnAjaxPost>点击我</div> <div id=divResu

概述jQuery中的ajax方法_jquery

1.原生ajax get请求和post请求区别:黄色小三角 以get请求为例,输出结果如下: 2.jquery中的ajax 列了常用的6个方法: 3.状态说明 readystate: 0:请求未初始化,open未调用 1:服务器连接已建立,open已经调用了 2:请求已接受,也就是接收到头信息了 3:请求处理中,也就是接收到响应主体了 4:请求已完成,且响应已就绪,也就是响应完成了 http状态码: 200:OK   一切正常,对GET和POST请求的应答文档跟在后面 301:Moved Per

jquery中页面Ajax方法$.load的功能

load语法 $(".selector").load("url", function(responseText, statusText, xmlhttprequest)); 可以做到加载一个页面的时候,如果发生错误,根据statusText给出的状态,显示对应的提示,这对用户来说非常重要. 例子,load post  代码如下 复制代码 <div id=btnAjaxPost>点击我</div> <div id=divResult>

jQuery中的$.extend方法来扩展JSON对象

$.extend方法可以扩展JSON对象,用一个或多个其他对象来扩展一个对象,返回被扩展的对象. 例一 合并 settings 和 options,修改并返回 settings var settings = { validate: false, limit: 5, name: "foo" }; var options = { validate: true, name: "bar" }; jQuery.extend(settings, options); 结果 set