Javascript 将从JSON获取的数据附加到Raphael对象
我自己解决了这个问题,见答案 使用jQuery 3.2.1和Raphael 2.1.1,如果这很重要的话 在我的Raphael.js中,我首先创建了一些没有任何数据的对象,并将它们放入一个数组中,例如。G(.attr省略): 在此之后,我想从一个JSON文件(一个名为“regions”的数组)中获取数据,该数组包含多个键值对(通过验证),并通过id将其作为数据追加。它如下所示:Javascript 将从JSON获取的数据附加到Raphael对象,javascript,jquery,json,ajax,Javascript,Jquery,Json,Ajax,我自己解决了这个问题,见答案 使用jQuery 3.2.1和Raphael 2.1.1,如果这很重要的话 在我的Raphael.js中,我首先创建了一些没有任何数据的对象,并将它们放入一个数组中,例如。G(.attr省略): 在此之后,我想从一个JSON文件(一个名为“regions”的数组)中获取数据,该数组包含多个键值对(通过验证),并通过id将其作为数据追加。它如下所示: { "regions": [{ "id": "0", "var
{
"regions": [{
"id": "0",
"var1": "foo1",
"var2": "bar1",
},
{
"id": "1",
"var1": "foo2",
"var2": "bar2",
},
// And so on for every object
]
}
我使用以下代码(使用localhost是因为否则会出现交叉访问错误):
for (var i = 0; i < objarr.length; i++)
{
var jq = $.getJSON("http://localhost:8000/data.json",{id: +i},function(t){
console.log( "success" );
})
.done(function(objdata){
console.log("success2");
$.each(objdata.regions, function(key, val){
objarr[i].data(key,val);
});
})
.fail(function(t){
console.log("error");
})
.always(function(t){
console.log("complete");
});
}
结果是一个字符串一直运行到[“id0:[对象对象]”]
,[“id0:[对象对象]”,“id1:[对象对象]”]
等等,直到它有了objarr.length ID,重复了所需的次数。如果我将[I]
添加到objdata.regions
,我就不会收到任何关于项目[]内容的控制台消息
我还发现了两个有点密切相关的问题(和),检查了jQuery文档中的.getJSON();
和Raphael文档中的Element.data();
。我尝试了以下方法来检查调用的有效性:
开头的console.log(objdata)
——返回JSON数据的完整基本对象.done
开头的console.log(objdata.regions)
——返回JSON数据的对象数组.done
开头的console.log(objdata.regions[i])
--返回未定义.done
开头的console.log(objdata.regions[0])
——返回第一个对象(适用于每个对象).done
项[]
一起使用,添加操作似乎正常(控制台显示添加到数组中的键和值)。但是,它仍然不能与objarr[I].data(key,val)
(以及“+key
和“$key”
)一起使用
我有两个问题:1.循环时如何正确获取键值对?
2.如何将这些对作为数据附加到Raphael对象?我将
for
循环移动到.done()
中,所有内容都被成功附加:
.done(function(objdata){
for (var i = 0; i < objarr.length; i++)
{
console.log("success2");
$.each(objdata.regions[i],function(key, val){
objarr[i].data(key, val);
});
}
})
.done(函数(objdata){
对于(变量i=0;i
var items = [];
$.each(objdata.regions, function(key, val){
items.push("id" + key + ":" + val);
console.log(items);
});
.done(function(objdata){
for (var i = 0; i < objarr.length; i++)
{
console.log("success2");
$.each(objdata.regions[i],function(key, val){
objarr[i].data(key, val);
});
}
})