※狀況概述:
就是我寫的一段測試CODE,可以回傳Map或是JSON格式的字串,透過HttpResponse的Body
回傳,然後Map和字串被jQuery Ajax的回調函數取得,進而取出Map和字串裡面的value。
※程式碼:
以下是透過servlet回傳一個map:
@RequestMapping(value = "/search/api/getSearchResult.do")
public Map<String,Object> getSearchResultViaAjax(HttpServletRequest request)
{
Map<String,Object> map = new HashMap<>();
String username = request.getParameter("username");
String email = request.getParameter("email");
map.put("username", username);
map.put("email", email);
return map;
}
以下是透過servlet回傳json格式字串:
@RequestMapping(value = "/search/api/getSearchResult1.do")
public String getSearchResultViaAjax1(HttpServletRequest request) {
//透過ajax傳送query string,直接用getParameter取值
Map<String,Object> map = new HashMap<>();
String username = request.getParameter("username");
String email = request.getParameter("email");
map.put("username", username);
map.put("email", email);
String json = new Gson().toJson(map);
return json;
}
然後map跟json格式字串回傳回前端的回調函數:
$.getJSON(
"/TestSpring4Ajax2/search/api/getSearchResult1.do",
$.param(search),
function(data) {
var json = "<h4>Ajax Response</h4><pre>"
+ data.email + "</pre>";
$('#feedback').html(json);
});
※補充說明:
以上的code沒有問題可正常執行,但我不懂的是為何java物件傳回去後,可以直接當成
JavaScript物件來使用,是jQuery有做甚麼轉換?或是javaScript本身支援這種用法??
我目前知道的是上面那個data物件是JavaScript物件,所以才可以直接用
屬性名稱來取值(data.email)。然後從servlet回傳的又是java物件,看起來就很像是
java物件在回傳過程中轉換成對應的JavaScript物件,可是這樣理解感覺很怪,
請問有更好的理解方式嗎??或是說為何可以直接把回調函數的參數,當成一般的
JavaScript物件來使用??