Javascript 为什么';t d3.json是否随请求发送cookie?

Javascript 为什么';t d3.json是否随请求发送cookie?,javascript,json,ajax,d3.js,cookies,Javascript,Json,Ajax,D3.js,Cookies,我不熟悉使用d3.js(v5)中的内置方法来处理ajax请求。这是我的密码: d3.json(uri).then(data =>console.log(data)); 我在一个使用cookie身份验证的应用程序中尝试了这一点,并不断获得401状态码。使用chrome开发工具显示,它发送请求时根本没有任何cookie 这很奇怪,因为默认情况下,本机javascript中的ajax请求会随每个请求一起发送cookie。以下是本机javascript中的ajax请求示例: function n

我不熟悉使用d3.js(v5)中的内置方法来处理ajax请求。这是我的密码:

d3.json(uri).then(data =>console.log(data));
我在一个使用cookie身份验证的应用程序中尝试了这一点,并不断获得401状态码。使用chrome开发工具显示,它发送请求时根本没有任何cookie

这很奇怪,因为默认情况下,本机javascript中的ajax请求会随每个请求一起发送cookie。以下是本机javascript中的ajax请求示例:

function nativeAjax(uri, callback) {
    let request = new XMLHttpRequest();
    request.onreadystatechange = function () {
        if (request.readyState === 4) {
            callback(request);
        }
    }
    request.open('get', uri, true);
    request.send(null);
}
nativeAjax(uri, request => console.log(request.status));
将其插入我的应用程序,chrome dev tools显示它确实会将身份验证cookie与请求一起发送,实际上是
请求。状态
返回为
200
,表明它确实已通过身份验证

我的问题是:

  • 如何配置
    d3.json
    以发送所需的cookie
  • 如何按状态捕获响应?例如,我想对401响应和403响应做一些不同的事情
  • 在哪里可以阅读关于如何使用d3.json的更完整的文档或示例?我一直使用原生ajax,因为我不使用jquery,但如果它是我正在使用的库的一部分,我想学习如何使用它。但是这本书几乎什么也没说,而且这本书也没有什么帮助。大多数教程都是针对d3的早期版本的,不再适用

  • 版本5切换到使用FetchAPI,默认情况下不会发送任何cookie。您可以通过添加d3.json的选项来克服这一问题:

    d3.json(uri, {credentials: "same-origin"}).then(...);
    
    或者,对于跨来源请求:

    d3.json(uri, {credentials: "include"}).then(...);
    
    如果返回4XX状态(或5XX),D3将导致承诺被拒绝,您可以通过向
    然后
    提供第二个回调函数来处理。我欢迎更正,但我相信在这个函数中无法获得实际的状态代码


    我在文档(撰写本文时)中发现的关于获取的更改和承诺的唯一提及是在更改日志中:.

    如果您搜索
    d3.csv
    d3.json
    ,您可以在v5文档中访问此页面