Java后台與js前端之間的通信問題


今天寫代碼遇到一個問題,就是需要在js中獲取后台傳過來的list集合,還需要對list進行遍歷獲取里面的對象,首先想到的是將list綁定到request對象上轉發到前端,然后用EL表達式直接獲取該list集合,可是遍歷該list出問題了,因為此時list已經不是集合了,而是字符串,對字符串遍歷只能得到單個字符,沒法獲取里面存儲的對象,所以這條路走不通。

然后想到了先將數據傳到JSP中,用jstl表達式對其進行遍歷,將遍歷得到的結果裝到一個隱藏的div里面,

    通過jQuery獲取該div里的HTML來間接獲取list里的內容,這樣做是可以的,代碼如下

 

這樣做的壞處是還得寫jstl及div,比較麻煩,然后想到了用json,流程是這樣的,在后台先將list集合轉化

為json字符串,然后綁定到request上轉發到前端,在js中直接用EL表達式獲取已轉化為json字符串的list,

在js中json字符串會被自動轉化為json對象,這樣list就變成了json數組,遍歷的時候就比較方便了,

獲取到json對象后,再根據鍵就可以取到值了,代碼如下:

后台:

@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
List<Coord> list=dao.findAll();
//==================================
JSONArray jsonArray2 = JSONArray.fromObject(list);//將集合轉換為json格式
String jsonString=jsonArray2.toString();//將json轉換為字符串
//==================================
req.setAttribute("list", jsonString);
//請求轉發
req.getRequestDispatcher("/baidu.jsp").forward(req, resp);
}

前端js:

var points = new Array();
var list=${list};
for (var i in list) {
var lon=list[i].longitude;//經度
var lat=list[i].latitude;//緯度
points[i]=new BMap.Point(lon,lat);
}

 

使用JSONArray需要導入包json-lib,在阿里雲的maven價包庫中坐標為

 

<dependency>
          <groupId>net.sf.json-lib</groupId>
          <artifactId>json-lib</artifactId>
          <version>2.2.1</version>
          <classifier>jdk13</classifier>
</dependency>

 

導入這個包,與其相關聯的包都會導入。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM