最近在學習Ajax作一個留言系統的時候碰到須要將list集合從後臺傳到前臺ajax接收並顯示的狀況,在網上搜了不少,但不少狀況都不是和我碰見的狀況同樣的,如今,直接貼出個人問題及解決方法。
後臺代碼:html
@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
前臺ajax接收代碼以下:spring
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(系統錯誤); } }); }
注意:json
var arr=data.replies;
這部分代碼是,後臺傳出的是map,並非直接的list集合replies,list集合replies是放進map集合內傳出的,因此data接收的是map,須要顯示的是list集合replies內的信息,因此在前臺新new一個對象接收map內的replies集合,來代替replies。app
信息的獲取注意for循環內的代碼,固然也能夠使用each進行循環遍歷。學習
$('#reply_'+mid)
這個地方是和下邊的html代碼結合使用的,下邊的html代碼是循環輸出,因此使用信息的id動態爲div賦予id名。url
html代碼以下:spa
<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>