Javascript 从PHP返回json编码并添加到变量
我有一个要添加到现有列表中的对象列表 我目前掌握的数据是:Javascript 从PHP返回json编码并添加到变量,javascript,ajax,Javascript,Ajax,我有一个要添加到现有列表中的对象列表 我目前掌握的数据是: var sdata = {"10":{"8":["106","22","1","1","0","0"]}}; 因此,我执行如下ajax请求: var result = ajaxFunction('call.php',hid+','+ps[0]+','+ps[1]); if(result != false){ document.write(result); sdata += result; //add to it } 返回并分配给结果
var sdata = {"10":{"8":["106","22","1","1","0","0"]}};
因此,我执行如下ajax请求:
var result = ajaxFunction('call.php',hid+','+ps[0]+','+ps[1]);
if(result != false){
document.write(result);
sdata += result; //add to it
}
返回并分配给结果的数据为:
{2: {7:[119, 22, 1, 1, 0, 0]}}
但我想知道的是:
sdata += result;
将新数据添加到“sdata”的正确方法是用于添加或字符串连接,而不是用于连接两个对象。要将
sdata
和result
放在一起,您可以在result
中循环,并且对于每个键,您可以在sdata
中创建一个同名键,以指向result
中的相应数据。这是一个更清晰的解释,因为JavaScript对象不会从一个对象复制到另一个对象,它们只是指向另一个对象
下面的代码只是一个“浅复制”,它只复制第一级的值。它还覆盖第一个对象中的任何内容。可以添加条件以防止覆盖
for(var key in result){ //loop through new results
if(result.hasOwnProperty(key){ //if it's an end property, not from prototype
sdata[key] = result[key] //put new key to old oject pointing to new set of values
}
}
最终结果如下:
sdata = {
"10" : {"8":["106","22","1","1","0","0"]},
"2" : {7:[119, 22, 1, 1, 0, 0]}
}
如何添加第二个键的数据和数组中的6个值?如果其中一个键已经存在,会发生什么情况(这是可能的)。。它会不会添加新的密钥。。。示例返回数据:{“10”:{“7”:[“106”、“22”、“1”、“1”、“0”、“0”]}或{“8”:{“8”:[119、22、1、1、0、0]}您需要一个递归副本。在Stackoverflow中有许多类似的问题可以解决这个问题。最流行的解决方案之一是J.Resig的jQuery ExtendUp,但我拒绝使用库;)您可以自定义构建jQuery,也可以直接查看它的源代码,看看它是如何实现的。我见过有人复制extend的实现。