3里面讲了提交ajax请求,这篇稍微深化。
3里面我直接从后台返回个字符串,不过项目稍微复杂些返回单个数据就明显不够用,主流的解决方案的是采用json格式从后台返回多种数据。
首先导入转换成json格式所需要的依赖,在pom.xml添加以下dependency
<!-- 后台数据转换成json用 --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.4.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.4.1.1</version> </dependency></span>然后建立一个返回用的类吧,首先开一个test.spring.entity包,这里就用来存实体类。
接着新建HelloWorldResponse类,在里面定义几个private变量,然后让eclipse生成Getter,Setter很方便。
生成Getter,Setter在打开着这个response类的时候选择顶部工具栏的Source -> Generate Getters and Setters...
完成后如下
package test.spring.entity; public class HelloWorldResponse { private Boolean error; private String str1; private String str2; public Boolean getError() { return error; } public void setError(Boolean error) { this.error = error; } public String getStr1() { return str1; } public void setStr1(String str1) { this.str1 = str1; } public String getStr2() { return str2; } public void setStr2(String str2) { this.str2 = str2; } } </span>error判断数据获取有无出错,剩下两个就是显示用的变量了
更改一下之前的getString,让他返回HelloWorldResponse,让response里的两个字符串变量的值分别等于Dao里取出来的和前台传过来的
@RequestMapping("/getString") @ResponseBody public HelloWorldResponse getString(@RequestParam(value = "str2", required = false, defaultValue = "Yeah!") String str2) { HelloWorldResponse resp = new HelloWorldResponse(); resp.setStr2(str2); resp.setStr1(helloWorldService.getStrFromService()); if(resp.getStr1() == null) { resp.setError(true); } else { resp.setError(false); } return resp; }</span>
另外获取前台数据使用HttpServletRequest也是很好用的,用getParameter()函数获取值,没有的话会是null
@RequestMapping("/getString") @ResponseBody public HelloWorldResponse getString(HttpServletRequest req) { HelloWorldResponse resp = new HelloWorldResponse(); resp.setStr2(req.getParameter("str2")); resp.setStr1(helloWorldService.getStrFromService()); if(resp.getStr1() == null) { resp.setError(true); } else { resp.setError(false); } return resp; }</span>
function getStr() { $.ajax({ type:"GET", url:"getString", dataType:"json", data:{str2:"Yes!"}, success:function(result){ if (!result.error) { $("#lab").text(result.str1 + result.str2); } } }); }</span>多了一个dataType表示后台返回数据的格式,选择json,还有data是表示传到后台的参数,记得data里面不要乱加空格,我因为这个被坑了一上午....
运行一下,很好很强大!