Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将从JSON获取的数据附加到Raphael对象_Javascript_Jquery_Json_Ajax - Fatal编程技术网

Javascript 将从JSON获取的数据附加到Raphael对象

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

我自己解决了这个问题,见答案

使用jQuery 3.2.1和Raphael 2.1.1,如果这很重要的话

在我的Raphael.js中,我首先创建了一些没有任何数据的对象,并将它们放入一个数组中,例如。G(.attr省略):

在此之后,我想从一个JSON文件(一个名为“regions”的数组)中获取数据,该数组包含多个键值对(通过验证),并通过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");
    });
}
结果是一个字符串一直运行到
[“id0:[对象对象]”]
[“id0:[对象对象]”,“id1:[对象对象]”]
等等,直到它有了objarr.length ID,重复了所需的次数。如果我将
[I]
添加到
objdata.regions
,我就不会收到任何关于项目[]内容的控制台消息

我还发现了两个有点密切相关的问题(和),检查了jQuery文档中的
.getJSON();
和Raphael文档中的
Element.data();
。我尝试了以下方法来检查调用的有效性:

  • console.log(objdata)
    开头的
    .done
    ——返回JSON数据的完整基本对象
  • console.log(objdata.regions)
    开头的
    .done
    ——返回JSON数据的对象数组
  • console.log(objdata.regions[i])
    开头的
    .done
    --返回未定义
  • console.log(objdata.regions[0])
    开头的
    .done
    ——返回第一个对象(适用于每个对象)
我在代码段中将objdata.regions[0]与
项[]
一起使用,添加操作似乎正常(控制台显示添加到数组中的键和值)。但是,它仍然不能与
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);
            });
        }
    })