jQuery的ajax 方法提交多个对象数组问题 C# traditional $.param
当用$.ajax()向后台提交参数时,如果参数中数组的话一般在后台会用List<T>接收;但老是不成功如下面代码
var arr1=[{ "aa": "", "bb": "" }, { "aa": "", "bb": ""}];
var arr2=[{ "aa": "", "bb": "" }, { "aa": "", "bb": ""}];
function addUser(){
$.ajax({
url:'UserAdd',
data:{list1:arr1,list2:arr2},
type:'post',
success:function(msg){
if(msg==''){
console.log('添加成功');
}else{
console.log('添加失败')
}
}
});
}
用Fiddler 监测之后发觉数据变成啦
list1[][aa]=&list1[][bb]=&list1[][aa]=&list1[][bb]=&list2[][aa]=&list2[][bb]=&list2[][aa]=&list2[][bb]=
C#中能识别的数组应该是这样的格式
list1[].aa=&list1[].bb=&list1[].aa=&list1[].bb=&list2[].aa=&list2[].bb=&list2[].aa=&list2[].bb=
在网上查找资料之后了解到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);
}
这样一来问题就解决啦!
jQuery的ajax 方法提交多个对象数组问题 C# traditional $.param的更多相关文章
- jquery中$.ajax方法提交表单
function postdata(){ //提交数据函数 $.ajax({ //调用jqu ...
- jQuery的ajax()方法提交数组问题
http://blog.csdn.net/thc1987/article/details/7278269 解决办法是添加一个属性 traditional:true $.ajax({ type: ...
- ajax系列之用jQuery的ajax方法向服务器发出get和post请求
打算写个ajax系列的博文,主要是写给自己看,学习下ajax的相关知识和用法,以更好的在工作中使用ajax. 假设有个网站A,它有一个简单的输入用户名的页面,界面上有两个输入框,第一个输入框包含在一个 ...
- 关于Jquery中ajax方法data参数用法的总结
data 发送到服务器的数据.将自动转换为请求字符串格式.GET 请求中将附加在 URL 后.查看 processData 选项说明以禁止此自动转换.必须为 Key/Value 格式.如果为数组,jQ ...
- 前端-jQuery的ajax方法
https://www.cnblogs.com/majj/p/9134922.html 0.什么是ajax AJAX = 异步的javascript和XML(Asynchronous Javascri ...
- jquery 通过submit()方法 提交表单示例
jquery 通过submit()方法 提交表单示例: 本示例:以用户注册作为例子.使用jquery中的submit()方法实现表单提交. 注:本示例仅提供了对表单的验证,本例只用选用了三个字段作为测 ...
- 重写jquery的ajax方法
//首先备份下jquery的ajax方法 var _ajax=$.ajax; //重写jquery的ajax方法 $.ajax=function(opt){ //备份opt中error和success ...
- jquery通过ajax方法获取json数据不执行success
1.jquery通过ajax方法获取json数据不执行success回调 问题描述:jquery通过ajax方法获取json数据不执行success回调方法 问题原因:json格式存在问题或不符合标准 ...
- jquery通过ajax方法获取json数据不执行success回调
问题描述:jquery通过ajax方法获取json数据不执行success回调方法 问题原因:json格式存在问题或不符合标准写法,导致总是执行error回调方法 解决方案:使json格式务必符合下述 ...
随机推荐
- UML建模语言入门 -- 用例视图详解 用例视图建模实战
. 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . 一. 用例视图概述 用例视图表述哪些 ...
- ibatis + log4net 配置注意事项
一 在web.config或app.config中配置 <configuration> <configSections> <sectionGroup name=" ...
- 深入探索AngularJS(持续更新)
数据双向绑定并不是Angular最出彩的地方.大部分对AngularJs的介绍都偏重于使用,使用的学习只是学了AngularJs的API,而那只能AngularJs的很小一部分.随着使用越来越深,系统 ...
- pasteimg浏览器中粘贴图片jQuery插件
pasteimg是一款可以在浏览器中实现图片粘贴的jQuery插件,兼容Chrome.Firefox.IE11以及其他使用这些内核的浏览器,比如,国内著名的360浏览器. pasteimg可以识别浏览 ...
- 辐射4 中文武器命名方法, 不用winhex, 直接游戏内操作
参考资料:https://www.reddit.com/r/fo4/comments/3t354b/tip_you_can_add_text_formatting_italic_underline/h ...
- 升级webapi依赖的Newtonsoft.json的版本
随着微软日渐重视开源社区的贡献,微软在自己的产品中往往也会集成开源的第三方库. 比如System.Net.Http.Foramatting.dll 就依赖于Newtonsoft.json v4.5. ...
- Spring基本概念
spring优点: 1降低组件间耦合度,实现软件各层之间的解耦. 2可以使用容器提供的各种服务.如,事务管理服务,消息服务等等. 当我们使用容器管理事务时,开发人员就不再需要手工控制事务,也不需处理复 ...
- Redis安装与日常使用
下载与安装 $ wget http://download.redis.io/releases/redis-3.0.3.tar.gz $ tar xzf redis-3.0.3.tar.gz $ cd ...
- RAR和ZIP:压缩大战真相
转:http://fqd2eh4y.blog.163.com/blog/static/69195855200801035015857 前言--王者归来? 等待足足两年之久,压缩霸主WinZip终于在万 ...
- JAVA学习绘图颜色及其笔画属性设置字体显示文字
package com.graphics; import java.awt.*; import java.awt.geom.Rectangle2D; import java.util.Date; im ...