msgbartop
PHP语言, PHP扩展, Zend引擎相关的研究,技术,新闻分享 – 左手代码 右手诗
msgbarbottom

01 Sep 08 Js处理Json的”invalid label”错

当你使用ajax的时候,json是一个很方便的数据传输手段.
但是对于很多人来说,经常会遇到的一个很令人头疼的问题就是”invalid label”错. 明明json串看起来是对的,怎么还会出错呢?

比如,如下的代码:

   function handle_success(response){
       var json = eval(response); // response = "{'foo' : 'bar'}";
  }

浏览器会报,invalid label错, 这是因为, eval会尝试将你的response解释为一个label, 当你在脚本中直接写:

<script>
  {'foo' : 'bar'};
</script>

会报错的原理是一样的.

解决办法有俩个:

         var json = eval('(' + response + ')'); // response = "{'foo' : 'bar'}";
 

或者

       eval('var json = ' + response); // response = "{'foo' : 'bar'}";
       //json is available now
 


分享到:



Related Posts:

Tags: , ,

11 Responses to “Js处理Json的”invalid label”错”

  1. Anonymous |

    还有一种方法是加上这句话:
    dataType : “json”,
    希望对后人有帮助

    还有一种方法是加上这句话:
    dataType : “json”,
    希望对后人有帮助

    还有一种方法是加上这句话:
    dataType : “json”,
    希望对后人有帮助

    还有一种方法是加上这句话:
    dataType : “json”,
    希望对后人有帮助

  2. 小灰马 |

    今天试了下,发现第一种方法比较好用,第二种方法可能会出错,例如我返回的是”\t\n\t\n {“name”:”hello”}”;(可能其他原因造成的多返回了几个换行符),这时第二种方法就获得不到那个json对象啦

  3. STR |

    它困绕我几个小时了,现在按照你提供的方法做,可以了,谢谢!

  4. Gone.Soft |

    呵呵,这篇文章都被我抠出来了

  5. |

    其实鸟哥您写这个理论上不是严格意义的 JSON, 应该算是 JavaScript 的 Object Literal吧。所以也能体现出和JSON一样的功能。JSON 与法规定 String 必须放在 双引号里面,单引号是不行的。以前看 ECMA-262 还是 RFC文档里面定义过,不太记得了。
    用 json2.js 的parse 验证一下, “{‘foo’ : ‘bar’}” 这个一定不是 JSON, ‘{“foo” : “bar”}’就对了。

  6. 雪候鸟 |

    @Anonymous 构建一个Function这个办法挺新颖, 赞.

  7. Anonymous |

    现在都不建议用eval了,解析JSON,可以用这个
    function jsonDecode(data){
    return (new Function(“return ” + data))();
    }

    其他要想实现类似的eval的功能,一般都是在DOM中创建一个script节点,然后script.text = data;

    jQuery1.4中就是如此,其他好几种Javascript框架都是这么做的。

  8. 雪候鸟 |

    看来这个问题还是很普遍的~ , ;)

  9. nece |

    我也遇到了这个问题。

  10. unique_zxs |

    十分感谢你,我也遇到了这个问题。

  11. lee |

    谢谢,不错,我也遇到这个问题,看了你这篇文章后解决了

Leave a Reply

*