首页 新闻 会员 周边 捐助

js中定义的变量无法使用

0
悬赏园豆:30 [已解决问题] 解决于 2018-03-08 16:01

如上图,在js代码中定义了一个变量str用来接收后台传来的数据,浏览器调试中可以看到data中是有值的,但是显示str的没有定义的,求前端大佬在不忙的时候帮我看下,我把这个加载代码贴上

$(document).ready(function() {
var zNodes; 
//目录菜单获取
$.ajax({ 
async : false, 
cache:false, 
type: 'POST', 
dataType : "json", 
url:"${pageContext.request.contextPath}/getZzjgList.action",
success:function(data){ 
var str= "["; 
for(var i=0;i<data.length;i++){
if(data[i].zzjg_id.length==1){
str+="{id:"+data[i].zzjg_id+",pId:"+data[i].pid+",name:\""+data[i].zzjg_name+"\",click:\"getMenu("+data[i].zzjg_id+")\",open:true},"; 
}else{
str+="{id:"+data[i].zzjg_id+",pId:"+data[i].pid+",name:\""+data[i].zzjg_name+"\",click:\"getMenu("+data[i].zzjg_id+")\",},";
}

}
str+="];"; 
str=(new Function("return " + str))();
zNodes=str;
} 
}); 

$.fn.zTree.init($("#treeDemo"), setting, zNodes);
setCheck();
$("#py").bind("change", setCheck);
$("#sy").bind("change", setCheck);
$("#pn").bind("change", setCheck);
$("#sn").bind("change", setCheck);
});
H2SO3的主页 H2SO3 | 初学一级 | 园豆:185
提问于:2018-03-08 11:31
< >
分享
最佳答案
0

继续往下走还是underfined?

收获园豆:10
Shendu.CC | 老鸟四级 |园豆:2138 | 2018-03-08 11:44

是的

H2SO3 | 园豆:185 (初学一级) | 2018-03-08 11:45

@H2SO3: 那你试试把“[”换成“a”,看看是否是因为特殊字符串的原因。

Shendu.CC | 园豆:2138 (老鸟四级) | 2018-03-08 11:46

@Shendu.cc: 试过了,不行,而且我弹出str数据也是对的

H2SO3 | 园豆:185 (初学一级) | 2018-03-08 11:48

@H2SO3: 你贴出来的代码和你图片的代码不一样,data[i].zzjg_id 和data[i].id 。你把控制台的错误信息发一下看下。

Shendu.CC | 园豆:2138 (老鸟四级) | 2018-03-08 11:54

@H2SO3: 我知道错误在哪里了!!!

Shendu.CC | 园豆:2138 (老鸟四级) | 2018-03-08 11:56

@H2SO3: js 定义字符串变量 var str="[" 这样是会报错的,你需要var str="[     ]" 才可以。可能是因为js要求这个"[" 匹配"]" 我以前也遇到过这个问题,我定义的是str="{" ;然而这样是不通过的。你可以var str="",最后的时候var str2 ="["+str+"];"  

Shendu.CC | 园豆:2138 (老鸟四级) | 2018-03-08 11:59

@H2SO3: 你去按我的试一试,看看是不是这样。

Shendu.CC | 园豆:2138 (老鸟四级) | 2018-03-08 12:00

@Shendu.cc: 应该不是,我之前另一个界面也是这样处理的,emmmm。。。我先试试你说的方法

H2SO3 | 园豆:185 (初学一级) | 2018-03-08 12:12

@H2SO3: 楼主解决了?

Shendu.CC | 园豆:2138 (老鸟四级) | 2018-03-08 18:03

@Shendu.cc: 数据的问题,不是前端的问题,数据库表中有脏数据

H2SO3 | 园豆:185 (初学一级) | 2018-03-08 18:05
其他回答(2)
0

我感觉问题出在这:str=(new Function("return " + str))();

收获园豆:10
悟行 | 园豆:12559 (专家六级) | 2018-03-08 11:51

这段话我去掉了之后还是不行,显示不了树形图

支持(0) 反对(0) H2SO3 | 园豆:185 (初学一级) | 2018-03-08 11:52

@H2SO3: 只除掉当然不行,需要把它转换成json :

str=(new Function("return " + str))(); 换成  str= eval("(" + str+ ")");

前提要保证你的str   json格式是对的

支持(0) 反对(0) 悟行 | 园豆:12559 (专家六级) | 2018-03-08 11:58

@H2SO3: 前提要保证你的str 的json格式是对的

支持(0) 反对(0) 悟行 | 园豆:12559 (专家六级) | 2018-03-08 11:58

@抽象ID: 格式是对的,我另外的一个界面也是这样处理的

支持(0) 反对(0) H2SO3 | 园豆:185 (初学一级) | 2018-03-08 12:10
0

str+="];";

console.log(str);

str=(new Function("return " + str))();

console.log(str);

========================

"zNodes=str;"从这句看,你需要一个数组,在JS里Array这个东西就是数组,var arr = new Array();或者var arr= [];

然后往数组里面添加数组元素就行了。

 

然而你为毛弄个字符串?拼接来拼接去,出错的概率无限大!

收获园豆:10
西漠以西 | 园豆:1675 (小虾三级) | 2018-03-08 12:02

好的,我试试

支持(0) 反对(0) H2SO3 | 园豆:185 (初学一级) | 2018-03-08 12:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册