作者TKB5566 (= =)
看板java
标题Re: [问题] 在Spring,回传物件给JQuery Ajax回调函数
时间Wed Aug 14 17:05:19 2024
※ 引述《lueichun (= =)》之铭言:
: ※状况概述:
: 就是我写的一段测试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物件来使用??
目前我的理解,是在後端若回传Map物件、且透过某些方法
例如添加@ResponseBody注释在方法开头,或使用gson套件将物件转为json格式......
的话,这个Map物件就会自动被後端转成json格式物件然後才回传前端;
jQuery接收到这个json格式物件,会将其自动解析成原生JS物件。
再将其交给JQuery AJAX回呼函数之参数。
那如果从後端回传的不是map物件,而是arraylist物件,
後端透过@ResponseBody注释,一样会将这arraylist物件,自动转型成json格式物件。
然後这个arraylist版本的json格式物件回到前端,
会被自动解析成js array物件,再转交给回呼函数的参数。
---------------------------------------
总之,
透过@ResponseBody注释,就不需要另外添加gson套件,也能自动将java物件转成
json格式物件;
Map物件就转成map版本的json格式物件、
arraylist物件就转成arraylist版本的json格式物件。
然後就回传到前端了,接着
在前端JQuery这边,再将各版本的json格式物件,转型成各自对应型别之js物件。
map版本的json格式物件就转成js map物件。
arraylist版本的json格式物件就转成js array物件。
这就是在JQuery AJAX函数中,後端java物件跟前端js物件两者之间的关系。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.125.132.92 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1723626321.A.C78.html
1F:推 GGing: 其实在 class level 加@RestController 就会自动转 json了 09/01 15:35
2F:→ GGing: ,效果等同於@Controller + @ResponseBody 09/01 15:35