Re: [问题] 在Spring,回传物件给JQuery Ajax回调函数

楼主: TKB5566 (我们的元首阿道夫希特勒)   2024-08-14 17:05:19
※ 引述《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物件,再转交给回呼函数的参数。
作者: GGing (小轩轩)   2024-09-01 15:35:00
其实在 class level 加@RestController 就会自动转 json了,效果等同于@Controller + @ResponseBody

Links booklink

Contact Us: admin [ a t ] ucptt.com