欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

前台取不到json传回来的对象数组中的值解决办法

程序员文章站 2022-05-11 20:30:00
...

今天在写竞赛的一个项目,使用spring框架来实现问卷的分页查询。也写成功了,结果如下:

前台取不到json传回来的对象数组中的值解决办法

       但是虽然效果实现了,但是并不完美,可以看到问卷发布人只有发布人的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;
                               }
                           }
                       }},


其中我测试了一下看看前台能不能收到响应。前台取不到json传回来的对象数组中的值解决办法

      可以看到它获取了数据库中的相关信息,但是输出data.length却为  undefined,然后导致最后显示的界面变成这个样子:

前台取不到json传回来的对象数组中的值解决办法

       不说将数据全部都拼接好一起展示,连原来的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,问题解决后如下:

前台取不到json传回来的对象数组中的值解决办法    

      可以看到显示id后在加名字。如果我们能一开始在后台 SurveyBizImpl类 中返回this.baseDao.findAll(Survey.class, "findwcxuname"),不用map来存,那样前台的data就可以直接拿去赋值了。所以有时候数据前台响应了却没有显示出来前台可能出错了,但是后台也是会有问题,尤其是不匹配的问题。不同的项目会遇到不同的问题,主要还是分享一些纠错的方法。如果有一样问题的可以参考一下。