我正在使用Sunlight Foundation's data APIs的一些构建数据可视化。我虽然得到了一个奇怪的错误。这是我的(非常简单的)d3.json()
电话:
d3.json(url, function(error, json) {
if (error) return console.warn(error);
data = json;
console.log(data);
});
我收到此控制台错误:
我真的不知道如何解释这个。 FWIW,我的网址采用以下形式:
var url = 'https://congress.api.sunlightfoundation.com/legislators/locate?zip='
+ userText + '&apikey=[my key]';
当我手动访问它时,在我的浏览器栏中,它很好 - 我看到了我想要的JSON:
我还尝试了一些其他网址(包含和不包含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 () {
。
在这两种情况下(本地或在线主机),我的其他d3方法(d3.select("body").append("p").text("Test.")
)工作正常。
第二次更新:here's a JSFiddle。虽然我的错误略有不同:在我的本地机器上,我得到“测试!”出现(作为检查d3没有完全打破)。在JSFiddle上,我没有 - 我在控制台中也得到了一个略有不同的错误消息。
答案 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>