最近在做基于spring 3 mvc 框架的项目,发现不用strut2也能做到异步请求然后返回json格式的数据。多说无益,还是贴上代码吧。
这个是control部分的代码
@RequestMapping("/querynum.do")
@ResponseBody //这个表示返回json
public Map<String,Object> queryCodecreateNum(HttpServletRequest request,HttpServletResponse response,
@RequestParam(value="createnum",required=false) String createnum,
HttpSession session, Model model) {
int creatindex=0;
Map<String,Object> map=new HashMap<String, Object>();
if(StringUtils.isEmpty(createnum)){
int[] array=this.wandadao.queryCreateNum();
if (array!=null && array.length>0) {
map.put("createnums", array);
creatindex=array[0];
}
}else {
creatindex=Integer.parseInt(createnum);
}
List<CreateNumBean> list=this.wandadao.queryCodeStartEndTime(creatindex);
map.put("createlist", list);
return map;
}
前端取值的部分
$("#editbtn").click(function(data){
$.post("querynum.do",null,function(data){
var arr=data.createnums; //直接取出数组,object类型
var num=data.createnums.length;
if(typeof(data.createnums)!=undefined){
//用each遍历这个Object,it是数值
$.each(data.createnums,function(i,it){
var option="<option value='"+it+"'>"+it+"</option>";
$("#edit-createnum").append(option);
});
var value=$("#edit-createnum").attr('selected', 'selected').val();
//createlist是一个泛型集合,item代表的是泛型实体对象,可以用item直接点实体的属性取值
$.each(data.createlist,function(i,item){
var txt="<li><p>"+item.counts+"个券码,当前生效时间:<input id=\"beign"+i+"\" type=\"text\" style=\"width: 120px;\" value=\""+item.starttime+"\" onfocus=\"showDate(0)\" >"+
"当前结束时间:<input id=\"end"+i+"\" type=\"text\" style=\"width: 120px;\" value=\""+item.endtime+"\" onfocus=\"showDate('beign"+i+"')\" >"+
"<input name=\"hidb"+i+"\" type=\"hidden\" value=\""+item.starttime+"\"><input name=\"hide"+i+"\" type=\"hidden\" value=\""+item.endtime+"\">"+
"<input type=\"button\" value=\"修改\" onclick=\"submitUp('"+i+"','"+value+"')\"></p><li>";
$("#editcard ul").append(txt);
});
}
},"json");//post最后一个参数一定要用"json",不然对象就取不出来了
});
在前端取值的时候还有一种方式,使用js的for循环,不过对于泛型集合取值时候需要多重循环,没有each好用。