JS получить, не получая заголовки в ответ - PullRequest
0 голосов
/ 28 мая 2018

Я делаю запрос, используя fetch для wordpress api, но я получаю пустой объект заголовков в ответе, кто-нибудь знает почему?

вот мое действие извлечения

export const getJobs = () => {
  return dispatch => {
    fetch(endpoints.jobs)
      .then(res => res.json())
      .then(data => dispatch(setJobs(data)))
  }
};

ивот объект, который я получаю перед выполнением res.json

body: (...)
bodyUsed: false
headers: {}
ok: true
redirected: false
status: 200
statusText: "OK"
type: "cors"
url: "url"

какие-либо идеи о том, как я могу получить все заголовки из ответа?

Ответы [ 3 ]

0 голосов
/ 28 мая 2018

Существует ограничение на доступ к заголовкам ответов при использовании CORS.Поскольку ваш тип ответа - cors, это может быть причиной.

Подробнее см. этот ответ.

0 голосов
/ 10 октября 2018

Для меня это была комбинация двух других ответов от приборной панели и TJ

На стороне сервера мне пришлось добавить заголовок access-control-expose-headers в мой ответ с разделенными запятыми заголовками, которые яхотел прочитать. См. Документы о access-control-expose-headers здесь.

Но когда я пытался получить доступ к res.headers через console.log(JSON.stringify(res.headers), он просто выводил {}.Решение TJ было для меня тем, что я должен был использовать:

res.headers.get("header-name");

И это дало мне результат, на который я надеялся.

0 голосов
/ 28 мая 2018

То, что консоль показывает {} для headers, не обязательно означает, что нет доступных заголовков.Если они были отправлены, они должны быть доступны на res.headers, который является Headers объектом, который ...

...позволяет выполнять различные действия с заголовками HTTP-запросов и ответов. Например,

... с get.

Например, если setJobs нужен заголовок foo:

export const getJobs = () => {
  return dispatch => {
    fetch(endpoints.jobs)
      // Read and parse the body and then return an object with the body data and the `foo` header
      .then(res => res.json().then(data => ({data, foo: res.headers.get("foo")})))
      // Receive the body data and the `foo` header and pass them on to `setJobs`
      .then(({data, foo}) => dispatch(setJobs(data, foo)))
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...