升级到d3js版本5时出错

时间:2018-04-17 18:49:09

标签: d3.js

我刚刚尝试从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改变了一些东西,或者我需要在请求中做更多的事情。

2 个答案:

答案 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的文档。

希望这有帮助。