前台取不到json传回来的对象数组中的值解决办法
今天在写竞赛的一个项目,使用spring框架来实现问卷的分页查询。也写成功了,结果如下:
但是虽然效果实现了,但是并不完美,可以看到问卷发布人只有发布人的id,还有模板分类的问卷模板id,看不到相关的具体文字描述,所以我们要修改前台的代码,并且在数据显示之前,把数据从别的表中查到存在前台界面的一个变量中。如下:(wcxuname_data在上面定义成全局变量了)
$(function(){
$.get("../../findwcxuname",{op:"findwcxuname"},function(data){
wcxuname_data = data; //将后台找到的数据存到前台的一个变量中
alert(wcxuname_data.length);
wcxLogin();
},"json");
});
我用了easyUI来显示数据,其中拼接部分代码如下:
{checkbox:true},
{field:'wcxsid',title:'问卷编号',width:80,align:'center',sortable:true},
{field:'wcxuid',title:'问卷发布人',width:100,align:'center',formatter:function(val,row,index){ //将用户id变成用户名
for(var i=0,len=wcxuname_data.length;i<len;i++){
if(wcxuname_data[i].wcxuid == val ){ //说明找到了该用户
return wcxuname_data[i].wcxuid+"_"+wcxuname_data[i].wcxuname;
}
}
}},
{field:'wcxsname',title:'问卷名称',width:100,align:'center',editor:{type:"text",options:{required:true}}},
{field:'wcxtid',title:'模板分类',width:80,align:'center',editor:{type:"text",options:{required:true}},formatter:function(val,row,index){ //将模板id变成模板名
for(var i=0,len=wcxuname_data.length;i<len;i++){
if(wcxuname_data[i].wcxtid == val ){ //说明找到了该用户
return wcxuname_data[i].wcxtid+"_"+wcxuname_data[i].wcxtname;
}
}
}},
其中我测试了一下看看前台能不能收到响应。
可以看到它获取了数据库中的相关信息,但是输出data.length却为 undefined,然后导致最后显示的界面变成这个样子:
不说将数据全部都拼接好一起展示,连原来的id都没有了。一开始目标一直在前台界面,觉得后台数据都返回回来了,可能前台哪里变量名写错了吧。翻来覆去检查一直没有找到。然后我就看到返回的这个json对象下面写着wcxuname,这就有点疑问了,于是我就忘后台去找。直到找到实现层 SurveyBizImpl类 的相关函数。
@Override
public Map<String, Object> findwcxuname() {
Map<String,Object> map = new HashMap<String,Object>();
map.put("wcxuname", this.baseDao.findAll(Survey.class, "findwcxuname") );
return map;
}
原来我返回到前台的是一个Map对象,里面存了一个键值对形式的数据,mao中键为“wcxuname”,值才是我们后台找到的相关数据。所以我上面直接写了 wcxuname_data = data 它是取不到我们返回的数据,也就为什么界面后来那两列都变成空白。我们要改为 :
$(function(){
$.get("../../findwcxuname",{op:"findwcxuname"},function(data){
wcxuname_data = data.wcxuname; //将后台找到的数据存到前台的一个变量中
alert(wcxuname_data.length);
wcxLogin();
},"json");
});
这样就可以直接取到里面的数据,而不能直接用data,问题解决后如下:
可以看到显示id后在加名字。如果我们能一开始在后台
SurveyBizImpl类 中返回this.baseDao.findAll(Survey.class, "findwcxuname"),不用map来存,那样前台的data就可以直接拿去赋值了。所以有时候数据前台响应了却没有显示出来前台可能出错了,但是后台也是会有问题,尤其是不匹配的问题。不同的项目会遇到不同的问题,主要还是分享一些纠错的方法。如果有一样问题的可以参考一下。
上一篇: 密码学——构建一个简化版的PRESENT算法并实现中间相遇攻击
下一篇: 对称加密/DES加密