2013-12-15 2 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

С первого взгляда это выглядит как проблема, касающаяся (а) вызовов синхронизации, но трудно сказать из данного кода. – Sirko

+0

... так что установите $ .ajax ({/ * blah blah * /, success: function (data) {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

Обновлен мой ответ. У вас есть консольный дисплей? – digitalextremist

+0

Все еще не работает. Попробуй! На консоли в строке localStorage в вашем коде я делаю: 'data.votes.totalVotes', и я могу видеть значение в консоли. Если я делаю 'JSON.stringify (data)' и просматриваю объект, то вообще нет свойства totalVotes. – Sean

0

Хорошо, извините, я был ненормальным. votes - массив, поэтому я устанавливал totalVotes как свойство массива, которое прекрасно в объекте, но при сериализации его пропускает.

Если кто-то еще такой же глупый, как и я, возможно, это поможет.