[問題] 在Spring,回傳物件給JQuery Ajax回調函數
※狀況概述:
就是我寫的一段測試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物件來使用??
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.10.6.169 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/java/M.1648442276.A.373.html
推
03/28 13:11,
2年前
, 1F
03/28 13:11, 1F
→
03/28 13:12,
2年前
, 2F
03/28 13:12, 2F
→
03/28 13:12,
2年前
, 3F
03/28 13:12, 3F
→
03/28 13:13,
2年前
, 4F
03/28 13:13, 4F
→
03/28 13:13,
2年前
, 5F
03/28 13:13, 5F
→
03/28 13:14,
2年前
, 6F
03/28 13:14, 6F
→
03/28 13:14,
2年前
, 7F
03/28 13:14, 7F
我剛剛又測試了以下CODE,將$.getJSON改成$.get、$.post:
$.post(
"/TestSpring4Ajax2/search/api/getSearchResult2.do",
$.param(search),
function(data) {
//第一種獲得javascript物件的方法
//var obj = eval('(' + data + ')');
//第二種獲得javascript物件的方法
var obj = JSON.parse(data);
var json = "<h4>Ajax Response</h4><pre>"
+ obj.email + "</pre>";//javascript物件
$('#feedback').html(json);
}
);
---------------------------------------
使用$.get、$.post時,回調函數的參數必須先另外轉成javascript物件,才可以直接使用
所以這是因為$.get、$.post沒有將中介的json格式的物件,轉成javascript物件,
所以必須回調函數接收到參數,另外轉成javascript物件??
→
03/28 14:50,
2年前
, 8F
03/28 14:50, 8F
→
03/28 14:52,
2年前
, 9F
03/28 14:52, 9F
→
03/28 14:57,
2年前
, 10F
03/28 14:57, 10F
→
03/28 14:59,
2年前
, 11F
03/28 14:59, 11F
→
03/28 14:59,
2年前
, 12F
03/28 14:59, 12F
→
03/28 15:02,
2年前
, 13F
03/28 15:02, 13F
→
03/28 15:03,
2年前
, 14F
03/28 15:03, 14F
謝謝,講得真是清楚。
※ 編輯: lueichun (101.10.6.169 臺灣), 03/28/2022 15:19:52
→
03/28 15:22,
2年前
, 15F
03/28 15:22, 15F
→
03/28 15:23,
2年前
, 16F
03/28 15:23, 16F
→
03/28 15:24,
2年前
, 17F
03/28 15:24, 17F
→
03/28 15:25,
2年前
, 18F
03/28 15:25, 18F
→
03/28 15:26,
2年前
, 19F
03/28 15:26, 19F
→
03/28 15:27,
2年前
, 20F
03/28 15:27, 20F
→
03/28 15:28,
2年前
, 21F
03/28 15:28, 21F
推
08/28 19:36, , 22F
08/28 19:36, 22F
→
08/28 19:36, , 23F
08/28 19:36, 23F
→
08/28 19:36, , 24F
08/28 19:36, 24F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
java 近期熱門文章
PTT數位生活區 即時熱門文章