Почему d3.json не отправляет куки с запросом? - PullRequest
0 голосов
/ 06 июня 2018

Я новичок в выполнении ajax-запросов со встроенными методами в d3.js (v5).Вот мой код:

d3.json(uri).then(data =>console.log(data));

Я пробовал это в приложении, которое использует проверку подлинности cookie, и продолжало получать 401 код состояния.Использование инструментов chrome dev показало, что он отправляет запрос вообще без файлов cookie.

Это странно, потому что запросы ajax в нативном JavaScript отправляют файлы cookie вместе с каждым запросом по умолчанию.Вот пример запроса ajax в нативном javascript:

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 показывают, что он отправляет куки-файл аутентификации вместе с запросом, и действительно request.status возвращается как 200 показывает, что он действительно аутентифицирован.

Мои вопросы:

  1. как мне настроить d3.json для отправки требуемого файла cookie?
  2. как мнепоймать ответ по статусу?Я собираюсь сделать что-то другое для ответа 401, например, для ответа 403.
  3. Где я могу прочитать более полную документацию или примеры того, как использовать d3.json?Я всегда делал нативные Ajax, потому что я не использую jquery, но, если это все равно часть библиотеки, которую я использую, я бы хотел узнать, как ее использовать.Но документация почти ничего не говорит об этом, и страница , на которую она ссылается , также не помогает.И большинство учебных пособий были для предыдущих версий d3 и больше не работают.

1 Ответ

0 голосов
/ 06 июня 2018

Версия 5 перешла на использование Fetch API, который по умолчанию не отправляет файлы cookie.Вы можете преодолеть это, добавив опции для d3.json, чтобы пройти через выборку:

d3.json(uri, {credentials: "same-origin"}).then(...);

Или, для запросов из разных источников:

d3.json(uri, {credentials: "include"}).then(...);

Если статус 4XX (или 5XX) возвращается D3 приведет к отклонению обещания, которое вы можете обработать, предоставив вторую функцию обратного вызова для then.Я приветствую исправления, но я полагаю, что в этой функции нет способа получить действительный код состояния.

Единственное упоминание об изменении в Fetch и обещаниях, которые я нашел в документации (на момент написания), былов журнале изменений: D3 v5 Изменения .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...