d3js:d3.json()抛出意外错误

时间:2014-11-01 15:27:17

标签: d3.js

我正在使用Sunlight Foundation's data APIs的一些构建数据可视化。我虽然得到了一个奇怪的错误。这是我的(非常简单的)d3.json()电话:

            d3.json(url, function(error, json) {
            if (error) return console.warn(error);
            data = json;
            console.log(data);
            });

我收到此控制台错误:

enter image description here

我真的不知道如何解释这个。 FWIW,我的网址采用以下形式:

var url = 'https://congress.api.sunlightfoundation.com/legislators/locate?zip=' 
+ userText + '&apikey=[my key]';

当我手动访问它时,在我的浏览器栏中,它很好 - 我看到了我想要的JSON:

enter image description here

我还尝试了一些其他网址(包含和不包含https),并且它们工作正常 - d3.js运行时没有破坏。我真的很茫然,因为它似乎只是这个特定的URL - 而且它似乎不是从Sunlight结束时发生的,因为当我通过浏览器栏访问它时,我可以看到我想要的JSON。

对于模糊的问题感到抱歉 - 错误信息(尤其是非常有意义的: ...)对我来说是完全神秘的!它似乎是d3.js本身的一个突破。希望其他人遇到此错误。 :/

已更新以添加:因此,如果我使用的是本地托管或在线版本的d3.js,则看起来错误的性质会略有变化。当我使用本地主机时:

            <script src="d3/d3.v3.js" charset="utf-8"></script>

d3.js文件在行request.open(method, url, true);是有问题的行时断开。

当我使用d3.js的d3js.org主机时,它在d3.js的第1行中断开:!function () {

enter image description here

在这两种情况下(本地或在线主机),我的其他d3方法(d3.select("body").append("p").text("Test."))工作正常。

第二次更新here's a JSFiddle。虽然我的错误略有不同:在我的本地机器上,我得到“测试!”出现(作为检查d3没有完全打破)。在JSFiddle上,我没有 - 我在控制台中也得到了一个略有不同的错误消息。

1 个答案:

答案 0 :(得分:1)

据我所知,API为CORS- and JSONP-enabled

  

Congress API支持所有域的CORS,因此使用任何现代的请求   任何现代浏览器中的JavaScript库都应该Just Work。

     

如果CORS不是一个选项,你可以提供一个回调参数来包装   结果是JavaScript函数,适合与​​JSONP一起使用。这可以   用于在浏览器中向Congress API发出跨域请求,   当不支持CORS时。

您提供的代码有效。所以似乎错误来自其他地方。至少你可以试试JSONP。

var url = 'https://congress.api.sunlightfoundation.com/legislators/locate?zip=20004&apikey=opendataday'; 
d3.json(url, function(error, json) 
{
  if(error)
  {
    return console.error(error);
  }
  console.log(json);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>