我正在使用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"
关于如何从响应中获取所有标题的任何想法?
答案 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')