搜尋

首頁  >  問答  >  主體

javascript - 为什么同样的JSON.parse在IE下可以使用但是在CHROME不行。

在谷歌下之只能这样子了。
[{"goodsNo":"1","buyNum":"1"},{"goodsNo":"1","buyNum":"1"}]
我是想继续添加对象,期望是下面这个样子的
[{"goodsNo":"1","buyNum":"1"},{"goodsNo":"1","buyNum":"1"},{"goodsNo":"1","buyNum":"1"}]
[{"goodsNo":"1","buyNum":"1"},{"goodsNo":"1","buyNum":"1"},{"goodsNo":"1","buyNum":"1"},...,...]

IE下没有任何问题

不好意思, 问题没有描述清楚

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<code>  var $goodsNo = $('#goods-no').val();

                var $buyNum = $('#buy-num').val();

                var goods = new Object();

                goods.goodsNo = $goodsNo;

                goods.buyNum = $buyNum;

                var cookieValue = getCookie("goods");

 

                if (cookieValue == "") {

                    console.log("empty");

                    var arr = [];

                    arr.push(goods);

                    var jsonStr = JSON.stringify(arr);

                } else {

                    var oldGoodsValue = base64Decode(cookieValue);

                    console.log(oldGoodsValue);

                    var jsonObject = JSON.parse(oldGoodsValue);

                    jsonObject.push(goods);

                    var jsonStr = JSON.stringify(jsonObject);

                }

                setCookie("goods", base64Encode(jsonStr), 3000);

              

</code>

我把JSON串(oldGoodsValue)转成json对象数组的时候出现了错误, 也就是
var jsonObject = JSON.parse(oldGoodsValue);
这句话出现了错误。

错误信息是这条Uncaught SyntaxError: Unexpected token

oldGoodsValue值是

[{"goodsNo":"1","buyNum":"1"},{"goodsNo":"1","buyNum":"1"}]

可能是字符没有转义导致无法处理。。我刚在控制台上给他们转义就可以了。
但是有一个问题, 为什么它不自动转义,虽然说可以手动转义但是遇到内容带有引号的怎么处理?


问题解决了, 是base64解码函数出现问题了。。

PHPzPHPz2896 天前281

全部回覆(5)我來回復

  • 迷茫

    迷茫2017-04-10 17:41:56

    不知道你想怎么样, 问题能描述清楚一点?

    回覆
    0
  • PHPz

    PHPz2017-04-10 17:41:56

    你给出的

    1

    2

    <code>oldGoodsValue = [{"goodsNo":"1","buyNum":"1"},{"goodsNo":"1","buyNum":"1"}]

    </code>

    是数组,明显会Uncaught SyntaxError: Unexpected token错误。至于IE为什么会成功,这让人费解,反正我试是不会成功。

    回覆
    0
  • PHPz

    PHPz2017-04-10 17:41:56

    明显你的oldGoodsValue经过base64Decode函数返回的是对象,而不是json数组的字符类型

    回覆
    0
  • 高洛峰

    高洛峰2017-04-10 17:41:56


    就你这句放到chrome控制台运行是没有问题的.

    1

    2

    3

    4

    5

    6

    <code>//代码感觉有点乱可以整理一下

    var cookieValue = getCookie("goods");

    var jsonObject = cookieValue ? JSON.parse(base64Decode(cookieValue)) : [];

    jsonObject.push(goods);

    var jsonStr = JSON.stringify(jsonObject);

    setCookie...</code>

    回覆
    0
  • 迷茫

    迷茫2017-04-10 17:41:56

    var jsonObject = JSON.parse(oldGoodsValue); 中Json.parse()只有两个功能, JSON 字符串转换成对象或者把字符串转化为数组

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    <code>var goods = new Object();

                    goods.goodsNo = 'a';

                    goods.buyNum = 1;

                        console.log("empty");

                        var arr = [];

                        arr.push(goods);

                        var jsonStr = JSON.stringify(arr);

                         //console.log(jsonStr);

                     

                        var oldGoodsValue = '[{"goodsNo":"1","buyNum":"1"},{"goodsNo":"1","buyNum":"1"}]';

                      //  console.log(oldGoodsValue);

                        var jsonObject = JSON.parse(oldGoodsValue);

                        //console.log(jsonObject);

                        jsonObject.push(goods);

                        var jsonStr = JSON.stringify(jsonObject);

                        console.log(jsonStr)

    </code>

    最好的结果: [{"goodsNo":"1","buyNum":"1"},{"goodsNo":"1","buyNum":"1"},{"goodsNo":"a","buyNum":1}]
    你的做法没有错啊,注意:push()追加的是对象,不是数组.

    回覆
    0
  • 取消回覆