我的JSON响应如下所示:
{"sample":[{"id":"2","name":"branch name"},{"id":"3","name":"branch name 2"}]}
我的功能如下:
function getJSONObjects(){
$.getJSON("http://localhost/api/branches",
function(data){
$.each(data.sample, function(i,item){
var loc = "branch";
eval("var " + loc + item.id + "=123;");
alert(loc + item.id);
});
});
}
我的想法是创建branch + id
对象,这样我就可以对它做一些事情(在地图上创建标记),所以我试着给它分配任何值,看看它是否有效。
我希望branch2
和branch3
都提醒123
,所以我有一些事情可以开始。但是目前这会警告branch2和branch3而不是123.
我没有创建动态变量/对象的经验,有人可以告诉我我做错了什么或者可能是解决这个问题的另一种方法吗?
答案 0 :(得分:3)
不知道你想在这里做什么:
eval("var " + loc + item.id + "=123;"); // eval is EVIL
alert(loc + item.id); // just creates a string...
创建dynamic variables
是一个坏主意。而是创建object
并使用键/值。
var branches = {}; // new object, move this to the scope you want to access the value from later
branch[item.id] = 123; // set the key 'item.id' to the value '123'
console.log(branch[item.id]); // retrieve the value of the key 'item.id'
但如果您这样做,您也可以将JSON数据的结构更改为:
{"sample":[{"1": {"name": "branch name1", "value": 123}, "2": {"name": "branch name2", "value": 456}}]}
然后抓住数组的元素并像上面的branches
一样使用它们。
答案 1 :(得分:0)
尝试使用以下函数迭代data.sample
:
function(i,item){
window[loc + item.id] = 123;
alert(window[loc + item.id]);
}
此处的window
对象用于设置全局变量,在运行时“动态”命名。 (但这不是一个好习惯。)
如果loc = 'branch'
和item.id = 2
,alert(window[loc + item.id])
语句将等同于alert(branch2)
。