【问题标题】:How to load a local JSON object via D3 library in a Rails3 app?如何在 Rails3 应用程序中通过 D3 库加载本地 JSON 对象?
【发布时间】:2011-12-24 02:54:30
【问题描述】:

在名为 choropleth.js 的文件中,代码如下:

d3.json("assets/data/us-counties.json", function(json) {
counties.selectAll("path")
  .data(json.features)
  .enter().append("svg:path")
  .attr("class", data ? quantize : null)
  .attr("d", path);
});

我尝试加载的 JSON 对象未加载。我收到以下错误:

choropleth.js:18 Uncaught TypeError: Cannot read property 'features' of null

我已经尝试了路径的所有变体(绝对路径、相对于 .js 文件、相对于视图等),但都不起作用。我正在使用 d3 库,但我认为这没有任何作用——我认为问题很简单“指定什么 URL 来加载本地 .json 文件?”

如果需要更多信息,请告诉我。即使您不知道答案,如果可以,请指导我获取更多信息。我非常愿意研究这个。谢谢--

【问题讨论】:

  • 看起来它正在尝试从应用程序的资产中加载状态 JSON 文件。服务器日志中的任何错误?服务器目录树中的 JSON 文件在哪里?你确定你有正确的路线吗?
  • JSON 是关于县边界坐标的数据。我把它放在 assets/data 目录中(在制作数据目录之后)。该文件位于 app/assets/data/us-counties.json。我没有为它设置任何路线。
  • 您正在调用“d3.json”并且不传递“json”参数。这就是它为空的原因。
  • 抱歉 Megas -- 你能详细解释一下吗?总的来说,我对 JavaScript 和 Web 编程真的很陌生。我试图从这个例子中学习:mbostock.github.com/d3/ex/choropleth.html
  • 您可以将静态 JSON 文件放入 app/public/data/us-counties.json 并以 /data/us-counties.json 访问它。我不确定/assets 路由器在哪里需要 JSON 文件。

标签: javascript ruby-on-rails ruby json d3.js


【解决方案1】:

看我对问题1418350的回答:基本上你需要为json回调提供两个参数,第一个是error,例如:

d3.json("world-countries.json", function(error, json) {
   // your code
}

【讨论】:

    【解决方案2】:

    如果你的回调函数被传递为 null,那是因为它未能加载文件。这可能有许多不同的原因。找出文件未加载原因的一个好方法是使用 WebKit 的开发人员工具和网络检查器。

    例如,如果您没有正确的 URL,您会看到 404 错误,并且请求的资源会显示为红色。如果服务器无法生成文件并出现错误,您可能会看到 500 错误。

    同样,如果您正在查看本地文件(地址栏中带有 file:// URL)并尝试通过 d3.json 加载另一个本地文件,您会看到安全异常,因为浏览器不会允许您使用 XMLHttpRequest 访问本地文件。 D3's README 有关于启动 Web 服务器以规避此错误的说明。

    【讨论】:

      猜你喜欢
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      • 2023-02-08
      • 2023-03-09
      • 1970-01-01
      • 2013-04-05
      • 2021-09-26
      • 2019-01-07
      相关资源
      最近更新 更多