这里我直接在浏览器运行过,直接会生成JSON数据格式
@RequestMapping("/api0")
public String openTestView2(Model model) {
return "test-api/List1";
}
@RequestMapping("/getNCL")
public void getData(HttpServletResponse response,Ncl searchCondition){
int totalCount = nclService.getTotalCount(searchCondition);
List<Ncl> list = nclService.getNclData(searchCondition);
ObjectMapper map = new ObjectMapper();
String rst = "";
try {
rst = map.writeValueAsString(list);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
StringBuilder sb = new StringBuilder();
sb.append("{\"Rows\":");
sb.append(rst);
sb.append(",\"Total\":");
sb.append(totalCount + "}");// 追加所有记录数到json
rst = sb.toString();
JsonUtil.writeJson(response, rst);// 向页面输出数据
}
{"Rows":[{"name":null,"year":2014,"mouth":1},{"name":null,"year":2014,"mouth":1}],"Total":28}
$(document).ready(function() {
$.ajax({
//请求方式为get
type:"GET",
//json文件位置
url:"${ctx}/api/getNCL.do",
dataType: "text",
contentType: "application/json; charset=utf-8",
success: function(data){
//json问题所以要把null弄成"null"
var datanew = data.replace(/null/g,"\"null\"");
$("div").append(datanew);
}
})
});
这样运行是可以在页面上加载出json格式数据的。但是如果调用datanew.rows[n]就不行了,解析不出数据来!
求各位大神帮忙看一下是怎么回事!!!万分感谢!!!
你错了,JsonUtil.writeJson向页面返回的应该是json格式的数据,而不是字符串;所以ajax接收这里的
success: function(data){
//json问题所以要把null弄成"null"
var datanew = data.replace(/null/g,"\"null\"");
$("div").append(datanew);
}
这里的data就是一个JSON格式的js对象的,不是字符串,所以不能通过你这种方式处理的。你直接处理这个对象,它的Rows属性就是一个数组参考如下:
success: function(data){
var datanew = data.Rows;
var result = '';
for(var i=0;i<datanew.length;i++){
var temp = datanew[i];
//处理数据
}
$("div").append(datanew);
}
问题就是不能直接按照字符串来处理,返回的值是JSON格式的。
rows和json的名字要对应。大小写要一致哈。
你传回来的是Rows
而不是rows
返回的是字符串类型吧,不是json对象,转一下
dataType: "text", 改成 dataType: "json", 返回的数据直接就可以用
我的问题的解决方法是,因为我controller里的writeJson直接输出的就是Json,所以只要dataType: "json"就可以了,别的都不用管。
然后毕小宝大神说的那个也是原因,我一直以为Json是可以打印出来的,所以之前其实已经弄出来了,但是因为没有打印就以为没有Json没有解析成功。
谢谢大家的帮忙!!!!
$.ajax({
//请求方式为get
type:"GET",
//json文件位置
url:"${ctx}/api/getNCL.do",
dataType: "json",
//请求成功完成后要执行的方法
success: function(data){
var datanew = data.Rows;
var result = '';
for(var i=0;i<datanew.length;i++){
var temp = datanew[i];
//处理数据
result=temp.amount;
alert("result+="+result);
}
}
})