2013-12-15 54 views
0

这是我的代码:JSON.stringify丢失/缺少的字段

// 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属性不存在。

任何想法为什么不,或如何解决它?

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

+0

欢迎来到** async **的美妙世界!你不能那样做。 – SLaks

+0

乍一看,它看起来像一个问题,涉及(a)同步呼叫,但很难从给定的代码中分辨出来。 – Sirko

+0

...所以设置$ .ajax({/ *等等等等,/成功:函数(数据){data.totalVotes = voteCount; localStorage .....}}) –

回答

0

这是您的通话$.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); 
    } 
}); 
+0

对不起,这不行。虽然它可能与我上次编辑有关。正在设置的属性不是data.totalVotes,它是data.votes.totalVotes,如果这有所作为。 – Sean

+0

更新了我的答案。你有任何console.log显示? – digitalextremist

+0

仍然不起作用。尝试一下!在代码中localStorage行的控制台上,我执行:'data.votes.totalVotes',我可以看到控制台中的值。如果我执行'JSON.stringify(data)'并查看对象,则根本没有'totalVotes'属性。 – Sean

0

好了,对不起,我是愚蠢的。 votes是一个数组,因此我将totalVotes设置为数组上的属性,这在对象中很好,但在序列化时会被省略。

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