/* 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()函数时,我被赋予了一个空对象......
如果您尝试使用相同的密钥存储两个值,会发生什么?我假设它会覆盖...所以我应该在结束数组中添加一个随机数学数字,以防止重复出现?
谢谢:)
答案 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);
}