Press "Enter" to skip to content

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
 

13 Comments

  1. Anonymous
    Anonymous 2013-08-15

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

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

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

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

  2. 小灰马
    小灰马 2011-12-23

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

  3. STR
    STR 2011-12-03

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

  4. Gone.Soft
    Gone.Soft 2011-07-07

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

  5. 彬
    2011-01-10

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

  6. 雪候鸟
    雪候鸟 2010-06-06

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

  7. Anonymous
    Anonymous 2010-06-06

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

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

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

  8. nece
    nece 2009-05-12

    我也遇到了这个问题。

    • 雪候鸟
      雪候鸟 2009-05-12

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

  9. unique_zxs
    unique_zxs 2009-01-09

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

  10. lee
    lee 2008-11-01

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

  11. lee
    lee 2008-11-01

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

  12. lee
    lee 2008-11-01

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

Leave a Reply

Your email address will not be published. Required fields are marked *