我想在前台的ajax里面的success得到这个list
怎么做呢
同意楼上说法,在实际开发中Controller层对于JSON数据应该是需要经过封装从而再次返回的。分享一下一个比较简单的封装类
public class Message implements Serializable {
/**
* 返回结果JSON封装类
*/
private static final long serialVersionUID = 1L;
private boolean success = true;
private String msg = "成功";
private Object obj;
public Object getObj() {
return obj;
}
public void setObj(Object obj) {
this.obj = obj;
}
public Message(boolean success, String msg) {
super();
this.success = success;
this.msg = msg;
}
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Message() {
super();
}
public Message(String msg) {
super();
this.msg = msg;
}
}
Controller层的RequestMapping映射器方法返回方法可以为Message 例:
public Message getAll(){
Message msg = null;
//返回结果
msg.setData(true,list);
}
在你后台的方法提上面加上 @ResponseBody
如:
@RequestMapping("/searchChartsData")
public @ResponseBody List<...> searchChartsData(){
...
return list;
}
这样前端ajax就可以取到纯数据了
在请求方法上加入注解 @RequestBody
ajax方法体中 加入 contentType: "application/json",dataType:"json",
用springboot就不需要@ResponseBody注解 前台可以用form提交表按的方式
在浏览器的network里,在response里能看到后台返回的数据的情况下,
申明一个receive
var that = this;//这里涉及到范围的问题
$.ajax({
url: URL,
type: 'POST',
dataType:"json",
success: function (data) {
if(data.code=="200"){
that.receive = data.result;
}else{
alert(data.reason);
}
},
error:function(evt){
console.log(evt);
}
});
@RequestMapping("/searchChartsData")
@RequestBody //意思就是返回JSon格式的数据
前端就可以取到key与value对应的数据
一般情况下,是定义一个通用的returnResult类,里面定义code,message,object等。
public class BaseRtnValue {
// 返回值
private int code;
// 返回消息
private String message;
private T model;
private List<T> modelList;
}
还有贴出来的后端代码有个错误,需要加@ResponseBody。
SpringMVC默认会根据你返回的结果查找对应的视图解析服务器,然后返回到对应的页面。
如果想直接返回数据,常用的方法就是:在方法体上增加@ResponseBody注解;
可以看下SpringMVC的原理相关的文档,有助于这方面的理解
后台代码注意要点:
1.后台给前台传递值的时候大多数分为以下几种情况:
a.list
b.map
c.对象
d.字符串
那么所要注意的:
多数的情况下,会出现前台传递参数到后台,那么我们需要多传递的参数进行验证,如:传递的是对象,那么我们需要对对象进行是否为null的验证,如果为null的话,那么得到的就是一个空的list或者是空的新对象,在传递到前台页面没有数据,显得没有意义;如果传递的是字符串,那么我们需要对字符串进行一下判断,首先要做的就是判断是否为null,这步很重要,且判断字符串的长度是否大于0;
那么在后台传递到前台是会有几种形式:同步传递以及异步(ajax方法):
在同步传递时,大多数的情况是没有什么需要注意的,但是ajax的方式就不同了,有多种的情况,一般的情况有一下两种:一种是text的形式,这种形式的多数是传递的成功与失败的时候使用;另一种是json的形式,对于json格式的数据又分为多种的情况:1.json的数据用于ajax中数据地拼接,很方便这种的情况主要是针对map以及list的数据格式,单独的对象是不行的,单独的对象只能是进行同步的交互。
2.前台获取到后台的传值所要注意的,主要的是分为两种也就是同步和异步的情况;
同步时:同步的情况下,多数是传递的为单个对象的时候,那么获取数据的时候,就需要使用到EL的表达式,那么在使用之前所要准备是就是引入EL表达式的文件包如下:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
其次就是对传递过来的对象进行判断,判断是否为空如下:/c:if,其次在使用进行遍历循环数据
异步时:也就是ajax的获取的时候,需要对传递过来的数据进行是否为null,且是否length是否大于0的判断,然后在进行拼接
正确答案:(求楼主给积分)
@RequestMapping下面加上@ResponseBody
@ResponseBody :将返回给前端的数据转换成json数据格式,因为你前端用的是ajax请求,所有请求成功时候可以在success函数里面
拿到后台返回的json数据。
1、既然前台是ajax提交,后台就必然加上@ResponseBody注解,要不然他就是是一个返回视图。
2、定义一个success类,里面最少包含一个泛型T,最好加上一个code和一个msg。
3、定义返回类型为success,之后前台ajax解析 data.data.对象存在get方法的属性名称。