通過Java servlet處理前臺頁面JS發(fā)出的請求,為了和JS兼容通常把Java變量轉化成JSON再傳遞給前臺的JS進行處理。例如在servlet中:
ArrayList tempList = new ArrayList();
tempList.add("a");
tempList.add("b");
JSONArray jsonArray = JSONArray.fromObject(tempList);
PrintWriter pw = response.getWriter();
pw.write( jsonArray.toString() );
這樣就可以把tempList轉換成json格式發(fā)給前臺JS處理。
如果要同時傳遞多個變量,可以自定義類存放N個屬性,放到ArrayList中轉換成jsonArray再傳過去,也可自己定義數(shù)據(jù)結構。但是對于邏輯、數(shù)據(jù)結構均不同的變量,確實要分開傳遞。例如想要再傳遞一個哈希Map:
Map clusterMap = new HashMap();
clusterMap.put("cluster", "a");
JSONObject jsonObject = JSONObject.fromObject(clusterMap);
注意JSON要求鍵值must be strings,因此所傳的Map的鍵值要為String類型
再write一下pw.write( jsonArray.toString() );
實際上如果這樣做的話JS并不能獲取到傳遞的變量,即使再加一層Map設定這些變量的鍵值,JS再通過鍵獲得這些變量也會出問題(不知道簡單的變量有沒問題,沒試過,但我用的時候就只能獲得第一個數(shù)據(jù))。
考慮到json格式的本質是數(shù)組,將轉換后的變量再用數(shù)組格式進行連接,再傳過去,就OK了。例如:
String r = "["+jsonArray.toString()+","+jsonObject2.toString()+"]";
PrintWriter pw2 = response.getWriter();
pw2.write(r);
這樣,JS通過獲取第0個數(shù)組就可以獲得tempList,第1個數(shù)組獲得clusterMap