springMVC如何利用json向前端传递一个集合

今天写了个js代码,需要遍历一个集合,但是程序执行到遍历的代码时就停止运行了,一度认为是js代码写错了,怎么改都不行,很是郁闷

springmvc代码:

 List<Nvr> nvrs = cameraService.findAllNvrByZoneName(zoneName);
 model.addAttribute("nvrs",nvrs);	 
js中代码如下:
var test = ${nvrs};
for(var i =0;i<test.length;i++){
	console.log(test[i]);
}

运行后在浏览器的源码是这样的:

vartest=[Nvr[nvr_id=1,nvr_name=test,nvr_ipv4=124.133.9.8,nvr_ipv6=null,nvr_port=809,nvr_username=admin,nvr_password=12345,zone_id=2]];

for(var i =0;i<test.length;i++){
	console.log(test[i]);
}

很显然在第一行中test的赋值是错误的,

然后把springmvc中的代码修改,把list结合转成jsonArray字符串,然后传递给前端,代码如下

List<Nvr> nvrs = cameraService.findAllNvrByZoneName(zoneName);
String nvrsjson = JSONArray.toJSONString(nvrs);
model.addAttribute("nvrsjson",nvrsjson);
用alibaba的JSONArray类处理成json字符串,然后传递给前端,再转成js对象,

在浏览器端查看源码如下:

var test = [{"nvr_id":1,"nvr_ipv4":"124.133.9.8","nvr_name":"test","nvr_password":"12345","nvr_port":809,"nvr_username":"admin","zone_id":2}];
for(var i =0;i<test.length;i++){
	console.log(test[i].nvr_ipv4);
}
这次test赋值就为json对象了

ps:以上代码中ip,port,username,password的值均已修改,切勿当真.


为什么会犯这个错误呢,

之前用springmvc很长时间没有显式的自己去转json字符串,慢慢把mvc的原理都忽略了;

现在解释一下为什么以前传递对象没有显示的转json字符串就没事.而这次就不行呢.

这要和springmvc的原理说起,el表达式取值是在springmvc的视图解析的时候取值的,以前传递的对象在视图解析器中就已经取出来具体的值了,然后再传给前端,前端接收到的就是具体的字符串或数字之类的值,并不存在json对象,

而这次需要把这个list集合传递给前端,然后让浏览器去解析这个list对象,这就需要转为json对象了,

比如下面的两个对比   (nvrs为前端的一个list集合,为java对象)

//js中代码如下: 
var test = "${nvrs[0].nvr_ipv4}";
//传递到浏览器中代码如下:
var test = "124.133.9.8 ";

ps:此处在给test赋值时必须在EL表达式上加引号,如有不懂请看本人的另一篇文章:http://blog.csdn.net/zlt_1222/article/details/78964408


//js中代码如下:
var test = ${nvrs};
//传递到浏览器中代码如下:
var test = [Nvr [nvr_id=1, nvr_name=test, nvr_ipv4=124.133.9.8 , nvr_ipv6=null, nvr_port=809,nvr_username=admin, nvr_password=12345, zone_id=2]];

/*
显然浏览器中的源码是错误的,所以必须把nvrs转成json字符串,浏览器才能正常解析
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值