1.使用json数据格式
- 传递数组
<button id="btn">点击</button> <script type="application/javascript"> $(function () { $("#btn").on("click",function (){ var nums=[1,2,3,4]; $.ajax({ type:"post", url: "/test", contentType: "application/json; charset=utf-8", data: JSON.stringify(nums), success: function (result) { alert(1) } }); }); }) </script>
@RequestMapping("/test") @ResponseBody public void test( @RequestBody Integer [] nums ){ for (int i=0;i<nums.length;i++){ System.out.println("第"+i+"个值为:"+nums[i]); } }
- 传递集合
<button id="btn">点击</button> <script type="application/javascript"> $(function () { $("#btn").on("click",function (){ var data = [{ username:"zhangsan", password:"123" },{ username:"lisi", password:"123" }]; $.ajax({ type:"post", url: "/test", contentType: "application/json; charset=utf-8", data: JSON.stringify(data), success: function (result) { alert(1) } }); }); }) </script>
@RequestMapping("/test") @ResponseBody public void test( @RequestBody List<UserEntity> users ){ users.forEach(user -> { System.out.println(user.toString()); }); }
- 传递对象(同上)
2.不使用json格式
- 传递数组
@RequestMapping("/test") @ResponseBody public void test( @RequestParam(value = "nums") Integer nums[] ){ for (int i=0;i<nums.length;i++){ System.out.println("第"+i+"个值为:"+nums[i]); } }
<button id="btn">点击</button>
<script type="application/javascript">
$(function () {
$("#btn").on("click",function (){
var data = [{
username:"zhangsan",
password:"123"
},{
username:"lisi",
password:"123"
}];
var nums=[1,2,3,4];
$.ajax({
type:"get",
url: "/test",
traditional:true, //默认false
data: {
nums:nums
},
success: function (result) {
alert(1)
}
});
});
})
</script>
traditional:是否使用传统的方式浅层序列化。 通过ajax提交数组时,会自动在所设定的参数后面增加中括号:“[]”, 导致后端spring MVC中的@RequestParam获取不到参数。解决方法: ajax请求时增加:traditional: true 就可以正常提交了。原因如下: jQuery会调用jQuery.param序列化参数,jQuery.param( obj, traditional ) ,默认的话,traditional为false,即jquery会深度序列化参数对象, 以适应如PHP和Ruby on Rails框架,但servelt api无法处理, 我们可以通过设置traditional 为true阻止深度序列化。
如果你不设置浅层序列化,对数组对象 应该这样设置
var arr={params:['param','param2']}; $.ajax({url:请求地址, data:arr, type:"POST", success:function(){ //do something } });