最近在學習Ajax做一個留言系統的時候碰到需要將list集合從后台傳到前台ajax接收並顯示的情況,在網上搜了很多,但很多情況都不是和我遇見的情況一樣的,現在,直接貼出我的問題及解決方法。
后台代碼:
@RequestMapping(value="/findReply") @ResponseBody public Map<String, Object> findReply(int mid){ System.out.println("mid:"+mid); List<Reply> replies=replyService.findReply(mid); Map<String, Object> map = new HashMap<String, Object>(); map.put("replies", replies); return map; }
后台是springMVC,將查詢的集合replies放進map,返回到前台。
前台ajax接收代碼如下:
var mid; function LookReply(mid){ $.ajax({ dataType:"json", type:"POST", url:"../reply/findReply.action", data:{mid:mid}, success:function(data){ var arr=data.replies;//如果前方代碼取值不稱就用這個:jQuery.parseJSON(data).replies; for(var i=0;i<data.replies.length;i++){ var name=arr[i].replier; var content=arr[i].reply; var time=arr[i].time; $('#reply_'+mid).prepend("<dl style='background-color:pink;'><dt>"+content+"</dt><dd>回復者:"+name+"</dd><dd>回復時間:"+time+"</dd></dl>"); } },error:function(data){ alert(系統錯誤); } }); }
注意:
var arr=data.replies;
這部分代碼是,后台傳出的是map,並不是直接的list集合replies,list集合replies是放進map集合內傳出的,所以data接收的是map,需要顯示的是list集合replies內的信息,所以在前台新new一個對象接收map內的replies集合,來代替replies。
信息的獲取注意for循環內的代碼,當然也可以使用each進行循環遍歷。
$('#reply_'+mid)
這個地方是和下邊的html代碼結合使用的,下邊的html代碼是循環輸出,所以使用信息的id動態為div賦予id名。
html代碼如下:
<c:forEach items="${messages }" var="message"> <div> <div> <p><font color="red">${message.content }</font></p> </div> <div><button onclick="LookReply(${message.mid })">查看回復</button></div> <div id="reply_${message.mid }"></div> </div> <br> </c:forEach>