我自己解决了问题,请参阅答案
使用jQuery 3.2.1和Raphael 2.1.1,如果这很重要
在我的Raphael .js中,我首先创建一些没有任何数据的对象并将它们推入一个数组中,例如: G。 (.attr省略):
var objarr = [];
var obj1 = rsr.path("M ... z");
objarr.push(obj1);
在此之后,我想从JSON文件中获取数据(一个名为&#34的数组;多个条目的区域"由多个键值对组成(通过JSONLint验证)并附加它作为id的数据。它看起来像这样:
{
"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");
});
}
控制台给了我两个成功,但在此之后我收到错误&#34;无法读取属性&#39;数据&#39;未定义&#34;。 alert(key)
和alert(val)
分别为每次通话提供0
和[object Object]
。我尝试将以下内容添加到.done
:
var items = [];
$.each(objdata.regions, function(key, val){
items.push("id" + key + ":" + val);
console.log(items);
});
结果是一个字符串["id0:[object Object]"]
,["id0:[object Object]", "id1:[object Object]"]
等等,直到它有objarr.length ids,重复所需的次数。如果我将[i]
添加到objdata.regions
,则根本没有关于items []内容的控制台消息。
我还发现了两个有些密切相关的问题("1"和"2"),检查了.getJSON();
的jQuery文档和Element.data();
的Raphael文档。我已尝试以下方法检查来电的有效性:
console.log(objdata)
开头的.done
- 返回JSON数据的完整基础对象console.log(objdata.regions)
开头的.done
- 返回JSON数据对象数组console.log(objdata.regions[i])
开头的.done
- 返回 undefined console.log(objdata.regions[0])
在.done
的开头 - 返回第一个对象(适用于每个对象)
我在items[]
的代码段中使用了objdata.regions [0],并且添加似乎正常工作(控制台显示添加到数组中的键和值)。但是,它仍然无法与objarr[i].data(key,val)
(以及""+key
和"$key"
)一起使用。
我有两个问题:
1.循环时如何正确获取键值对?
2.如何将这些对作为数据附加到Raphael对象?
答案 0 :(得分:0)
我在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);
});
}
})