我想加载此函数中看到的以下JSON结构。
function load1(input) {
var txt = '{ "kind1" : [{ "name":"blue" , "color":"blue" },{ "name":"red" , "color":"red" },{ "name":"yellow" , "color":"yellow" } ], "kind2" : [{ "name":"blue2" , "color":"blue2" },{ "name":"red2" , "color":"red2" },{ "name":"yellow2" , "color":"yellow2" } ]}';
var obj = eval("(" + txt + ")");
var output = "";
for (var i in obj.kind1) {
output += obj.kind1[i].name + ", " + obj.kind1[i].color + "<br>"
}
document.getElementById("content").innerHTML = output + "Eingabe: " + input
}
现在我需要通过链接的“id”动态加载JSON的函数。
<a onclick="return load1(this.id)" id="kind1">link_product1</a>
<a onclick="return load2(this.id)" id="kind2">link_product2</a>
是否可以更改查询“obj.kind1”来执行此操作?我可以将id加载到函数中,但用“input”替换“kind1”是行不通的。任何人都可以证明这种逻辑是如何运作的?
答案 0 :(得分:0)
由于您的函数体中有txt
硬编码,因此在我看来,您可以对要使用的实际JavaScript对象进行硬编码,并跳过eval
步骤。如果出于某种原因您不想这样做,则应使用JSON.parse
代替。即使是相对较旧的浏览器(IE8)也支持它。
然后,您可以使用括号表示法访问提供的密钥:
for (var i = 0; i < obj[input].length; i++) {
output += obj[input][i].name //etc.
编辑:基于你的“我正在使用函数getJSON”,这似乎表明你正在使用jQuery,而$.parseJSON
可用。返回到getJSON
回调的数据不需要解析。它应该已经是JavaScript构造。