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的实现。