解决遍历json时length找不到对象问题

本文介绍了如何在JavaScript中解析并遍历JSON格式的数据。包括使用eval和JSON.parse方法,并针对不同情况(如通过AJAX获取JSON数据)进行了说明。此外,还提供了IE8浏览器下JSON.parse方法的兼容性解决方案。

 

<script type="text/javascript">
   //1.首先json 格式一定要这样写,尽管说这只是其中的一种方式
  var json = {"options":"[{\"text\":\"王家湾\",\"value\":\"9\"},{\"text\":\"李家湾\",\"value\":\"10\"},{\"text\":\"邵家湾\",\"value\":\"13\"}]"} 
  json = eval(json.options)// 注意options,如果不写Options ,下面的写法就是json.options.length
  for(var i=0; i<json.length; i++)
  {
     alert(json[i].text+" " + json[i].value)//访问
  }
</script>

 

 

注意:正常情况下以上方法都可以遍历,但是如果json是作为一个参数传进来的话,如下

$.ajax({
      type: "POST",
      url: "jsonAjax.htm",
   data: {oname:subA.innerHTML},
      dataType:"text", //ajax返回值设置为text(json格式也可用它返回,可打印出结果,也可设置成json)
      success: function(json){

       alert(json);
      //比如这里输出的是{"options":"[{\"text\":\"王家湾\",\"value\":\"9\"},{\"text\":\"李家湾\",\"value\":\"10\"},{\"text\":\"邵家湾\",\"value\":\"13\"}]"}  ,格式数据完全相当,但是如果不加上红色这句话,就会出现length为空或不是对象,或者 火狐中报出json undefind的错误

       json = JSON.parse(json);//需要加上这一句

       json = eval(json.options); 
       alert(json.length);
    for(var i=0; i<json.length; i++)
    {
        //do something
    }
       
      },
      error: function(json){
       alert("json=" + json);
        return false;
      }
     }); 

注意:JSON.parse在IE8下面会报错,说JSON未定义,解决方法如下(转自
孟宪会 的BLOG

方法1:定义<!DOCTYPE> 

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>孟宪会:JSON测试</title>
</head>
<body>
<script type="text/javascript">
alert(typeof JSON);
</script>
</body>
</html>

 


方法2:设置X-UA-compatible 标头

 


<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
<title>孟宪会:JSON测试</title>
</head>
<body>
<script type="text/javascript">
alert(typeof JSON);
</script>
</body>
</html>
或者
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=8" >
<title>孟宪会:JSON测试</title>
</head>
<body>
<script type="text/javascript">
alert(typeof JSON);
</script>
</body>
</html>

 


在实际编程程序的时候,最好的办法是进行判断,如果不支持原生的JSON,那么就是要json2.js提供的对象即可

 

转载于:https://www.cnblogs.com/hqr9313/archive/2012/10/17/2727283.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值