jsondata.TA.push(ta2);
var option = {
url: ‘/test/Fortest’,
type: ‘POST’,
data: JSON.stringify(jsondata),
dataType: ‘html’,
contentType: ‘application/json’,
success: function (result) { alert(result); }
};
$.ajax(option);
});
最终,发送出去的json字符串如下:
{“TB”:{“b1″:”b1″,”ITCC”:{“c1″:[1,2,3,4]}},”TA”:[{“a1″:”a1″,”a2”:[“a”,”b”,”x”,”y”]},{“a1″:”a2″,”a2”:[“a2″,”b2″,”x2”]}]}
Controller接收到这个json串后,就能自动的匹配参数了。具体得到的参数如下截图:
![clipboard[6] clipboard[6]](https://www.easck.com/d/file/200523/20200523060119321.jpg)
![clipboard[7] clipboard[7]](https://www.easck.com/d/file/200523/20200523060120322.jpg)
总结:
1.不指定contentType的话,默认都是application/x-www-form-urlencoded方式发送。此时即便发送的是json格式的数据,默认情况下,jquery的ajax也会把他转为查询字符串的形式(可以通过修改ajax参数修改),以FormData的形式发送出去。
2.不指定contentType的时候,如果controller中的方法签名比较简单,那么即便是FormData形式的数据也能由MVC的命名匹配规则获取到数据。
3.指定contentType为’application/json’时候,发送的数据必须是符合json规范的字符串。通常,使用 JSON.stringify(jsondata)有较好的可读性,可以获得一个json字符串。当然,不是必须的。使用拼接的字符串,只要是符合json规范的,也是可以发送的。
4.如果contentType为’application/json’时,发送的data不是符合json规范的字符串,则会出错。
5.通常情况下,尽量指定contentType为’application/json’,并且发送json字符串作为发送数据,这样可读性更好,并且对于复杂的函数签名,也能起到很好的匹配。










