我刚刚尝试从v4切换到d3 v5,并且每次使用d3.json我都会收到401(未授权)错误。我似乎无法弄清楚改变了什么或者这是一个错误。
这是对v4中随机数据集的典型调用,它与v4库完全兼容:
var url = "somedata.json";
d3.json(url, function(error, json) { console.log(json); });
我为v5更改了相应的代码并得到401错误:
var url = "somedata.json";
d3.json(url).then(function(data){
console.log(data);
});
如果我最初没有说清楚问题是401错误,我道歉。除了promise构造之外,唯一的变化是d3版本。
我为此创建了一个插件,它工作得很好: https://plnkr.co/edit/iTZzdc27eJaubiOJvmsi?p=preview
我认为问题是d3 v5库与我的Web服务器(在专用网络上)的组合:使用Windows域安全性的IIS。由于版本4(以及所有以前的版本)都运行良好,我想是用d3改变了一些东西,或者我需要在请求中做更多的事情。
答案 0 :(得分:2)
需要向请求添加凭据信息:
var url = "somedata.json";
d3.json(url, {credentials: 'same-origin'})
.then(function(data) { console.log(data); });
.error(function(error) { console.log(error); });
这解释了这个问题: Access denied under Basic Authentication
答案 1 :(得分:-1)
Promises的典型用法通过以下方式完成:
doSomething().then(function(response) {
// success
}).catch(function(error) {
// error
});
因此d3.json()
将产生以下结构:
d3.json(url).then(function(json) {
console.log(json);
}).catch(function(err) {
console.log(err);
});
我使用相同的创建Plunkr:
DEMO FOR d3 v5 Promises (d3.json() example)
出于测试目的,请尝试更改d3.json()
功能中的网址,您将在控制台中观察到错误。
详细了解promises here。另外,请查看d3 v5 - CHANGES的文档。
希望这有帮助。