JSON stringify的问题?

时间:2012-06-22 00:08:48

标签: javascript jquery json

/* Helper function to clean up any current data we have stored */
function insertSerializedData(ids, type) {
    // Get anything in the current field
    current_data = $('#changes').val();
    if (!current_data) {
        var data = new Array();
        data[type] = ids;
        $('#changes').val(JSON.stringify(data));
    } else {
        var data = JSON.parse($('#changes').val());
        data[type] = ids;
        $('#changes').val(JSON.stringify(data));
    }
    console.log($('#changes').val());
}

我正在使用以下函数将数据添加到当前JSON对象或创建一个新的JSON对象,以便稍后在PHP中使用。 stringify()方法仅适用于FF吗?我正在使用谷歌浏览器,当使用conosole.log()函数时,我被赋予了一个空对象......

如果您尝试使用相同的密钥存储两个值,会发生什么?我假设它会覆盖...所以我应该在结束数组中添加一个随机数学数字,以防止重复出现?

谢谢:)

2 个答案:

答案 0 :(得分:2)

这些行可能会导致问题:

var data = new Array();
data[type] = ids;

...因为JavaScript中的数组与PHP中的数组不太相似。我想你的意思更好地表达了......

var data = {};
data[type] = ids;

此外,current_data似乎是此函数的本地,因此它也应该声明为var的本地。没有看到任何其他问题......除了类似的功能已经在jQuery .data()方法中实现。

更新:这里是jsFiddle。 )从我的尝试看起来,数组对象不匹配实际上是导致Chrome行为的原因。

答案 1 :(得分:0)

我重新格式化了一下,但这似乎有效。它会将#changes元素的“value”属性设置为JSON字符串。我假设type参数应该是您尝试分配的数组的索引?

function insertSerializedData(ids, type) {
  var changes = jQuery('#changes'), arr, val = changes.val();
  if (!val) {
    arr = [];
    arr[type] = ids;
    changes.val(JSON.stringify(arr));
  } else {
    arr = JSON.parse(val);
    arr[type] = ids;
    changes.val(JSON.stringify(arr));
  }
  console.log(changes);
}