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

时间:2017-05-06 06:27:00

标签: javascript jquery json ajax

我自己解决了问题,请参阅答案

使用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
  • {li> console.log(objdata.regions[0]).done的开头 - 返回第一个对象(适用于每个对象)

我在items[]的代码段中使用了objdata.regions [0],并且添加似乎正常工作(控制台显示添加到数组中的键和值)。但是,它仍然无法与objarr[i].data(key,val)(以及""+key"$key")一起使用。

我有两个问题:
1.循环时如何正确获取键值对?
2.如何将这些对作为数据附加到Raphael对象?

1 个答案:

答案 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);
            });
        }
    })