JS获取,而不是响应时获取标头

时间:2018-05-28 17:09:09

标签: javascript wordpress fetch

我正在使用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"

关于如何从响应中获取所有标题的任何想法?

4 个答案:

答案 0 :(得分:3)

使用CORS时访问响应头有一个限制。由于你的回应类型是可能是罪魁祸首的角色。

有关详细信息,请参阅this答案。

答案 1 :(得分:2)

仅仅因为控制台显示{} 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)))
  }
};

答案 2 :(得分:0)

对我来说,这是仪表板和T.J的其他两个答案的组合。

在服务器端,我必须将标头access-control-expose-headers添加到响应中,并带有要读取的逗号分隔标头。 See docs about access-control-expose-headers here.

但是,当我尝试通过res.headers访问console.log(JSON.stringify(res.headers)时,它只是输出{}。 T.J.的解决方案对我有效,因为我必须使用:

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

那给了我我想要的结果。

答案 3 :(得分:0)

尝试使用此代替:

response.headers.get('x-auth-token')