web项目开发中,我们经常会遇到需要向后台传递一个数组的情况,主要有两种形式,一种是传递简单的字符数组,另一种就是传递一个对象数组,以下是针对这两种情况的处理方式。
传递字符数组
jQuery.ajax向后台传递一个字符数组,需要设置 traditional: true,后台用 String[] arr 就可以接收到了
var arr = ["a", "b", "c"];
$.ajax({
url: "save",
type: "post",
dataType: "json",
traditional: true,//加上这个属性,后台用 String[] arr 就可以接收到了
data: {
"arr": arr
},
success: function (data) {
//...
}
});
传递对象数组
jQuery.ajax向后台传递一个对象数组,需要使用JSON.stringify() 把json对象数组转成json字符串传到后台,在后台使用 JSONArray jsonArray = JSONArray.fromObject(jsonObjArr); 把前台传递过来的json字符串解析成 jsonArray,然后可以遍历 jsonArray 即可得到数组中的每一个对象。
//定义json对象数组
var jsonObjArr = [
{
"id": "1",
"name": "菜鸟教程",
"url": "www.runoob.com"
},
{
"id": "2",
"name": "菜鸟工具",
"url": "c.runoob.com"
},
{
"id": "3",
"name": "Google",
"url": "www.google.com"
}
];
//使用JSON.stringify() 把json对象数组转成json字符串传到后台
$.ajax({
url: "save",
type: "post",
dataType: "json",
data: {
"jsonObjArr": JSON.stringify(jsonObjArr) //转成json字符串传到后台,后台用 String jsonObjArr 字符串接收
},
success: function (data) {
//...
}
});
//后台处理前台传递过来的 String jsonObjArr 字符串
JSONArray jsonArray = JSONArray.fromObject(jsonObjArr);
for(int i=0;i<jsonArray.size();i++){
JSONObject jsonObject = jsonArray.getJSONObject(i); //得到数组中的单个对象
String id = jsonObject.get("id").toString();
String name = jsonObject.get("name").toString();
String url = jsonObject.get("url").toString();
System.out.println("id:"+id+"name:"+name+"url:"+url);
}
当然前端传递简单的字符数组,也可以按传递对象数组的方式来处理,只是在后台处理的时候应该这样写:
JSONArray jsonArray = JSONArray.fromObject(jsonObjArr);
for(int i=0;i<jsonArray.size();i++){
String attr = jsonArray.get(i).toString(); //此时 jsonArray.get(i)得到的不再是JSONObject,而是简单的字符元素
}