【问题标题】:JSON.stringify loses/missing fieldsJSON.stringify 丢失/缺失字段
【发布时间】:2013-12-16 01:55:23
【问题描述】:

这是我的代码:

// get from ajax
$.ajax({
    'async': false,
    'global': false,
    'url': url,
    'dataType': "json",
    'success': function (d) {
        data = d;

        // code here to define & calculate voteCount

        data.votes.totalVotes = voteCount;
        localStorage.setItem(url, data);
    }
    , 'error': function (msg) {
        throw new Error("Error retrieving data from " + url);
    }
});

在这一行之后:

data.votes.totalVotes = voteCount;

...在控制台中,如果我输入:data.votes.totalVotes,我会得到我期望的值。

但是,如果我输入:JSON.stringify(data)totalVotes 属性不存在。

知道为什么不,或者如何解决它?

** 注意:已编辑,因为据我所知这不是异步问题,成功回调中也存在该行为。

【问题讨论】:

  • 欢迎来到 async 的美妙世界!你不能那样做。
  • 乍一看,这似乎是一个与 (a)sync 调用有关的问题,但很难从给定的代码中分辨出来。
  • ...所以设置一个 $.ajax({/* blah blah */,success: function(data){data.totalVotes = voteCount; localStorage..... }})跨度>
  • 感谢@SLaks,但它是 async:false,所以这肯定不是异步问题?
  • 那就错了。 async: false 冻结浏览器;不要那样做。

标签: javascript json stringify


【解决方案1】:

这是您的$.ajax 调用的正确版本:

var data
$.ajax({
    'async': false,
    'global': false,
    'url': url,
    'dataType': "json",
    'success': function (d) {
        data = d;
        data.votes.totalVotes = voteCount;
        localStorage.setItem("myData", JSON.stringify(data));
    }, 'error': function (msg) {
        throw new Error("Error retrieving data from " + url);
    }
});

【讨论】:

  • 抱歉,这不起作用。虽然这可能与我上次的编辑有关。设置的属性不是 data.totalVotes,而是 data.votes.totalVotes,如果这有区别的话。
  • 更新了我的答案。你有console.log显示吗?
  • 还是不行。试试看!在代码中 localStorage 行的控制台上,我这样做:data.votes.totalVotes,我可以在控制台中看到该值。如果我执行JSON.stringify(data) 并查看对象,则根本没有totalVotes 属性。
【解决方案2】:

好吧,对不起,我太傻了。 votes 是一个数组,所以我将totalVotes 设置为数组的属性,这在对象中很好,但在序列化时会被省略。

如果其他人像我一样愚蠢,也许这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-11
    • 2013-05-10
    • 1970-01-01
    • 2012-04-02
    • 2013-06-30
    • 2022-09-29
    • 1970-01-01
    • 2014-07-10
    相关资源
    最近更新 更多