我正在使用fetch polyfill与“无人”#39;模式和获取响应状态0.在开发人员工具中,我可以看到响应具有请求的数据。
客户端代码:
const BASE_CONFIG = {
credentials: 'include',
mode: 'no-cors'
};
let checkStatus = (response) => {
if (response.status >= 200 && response.status < 300) {
return response;
} else {
var error = new Error(response.statusText);
error.response = response;
throw error;
}
};
function GET(url, urlParams={}, config={}) {
let requestConfig = {
method: 'get'
};
Object.assign(requestConfig, BASE_CONFIG, config);
return fetch(url, requestConfig)
.then(checkStatus)
.then(parseJSON);
}
GET('http://other.domain,{})
&#13;
Beckend nodejs(Express.js)简化响应处理程序:
function getData(req, res) {
var responseData = {data: 'test'};
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.writeHead(200, {"Content-Type": "application/json"});
return res.end(JSON.stringify(responseData));
}
&#13;
知道我做错了什么吗? 谢谢!
答案 0 :(得分:1)
我不知道您是否使用 file:协议,但在这种情况下,您可以获得响应状态0。
Chrome和Firefox的本机实现都不支持获取本地文件
请参阅:https://github.com/github/fetch/pull/92#issuecomment-140665932
目前,不幸的是,文件和ftp URL仍然是读者的练习。如有疑问,请返回网络错误。
请参阅:https://fetch.spec.whatwg.org/#basic-fetch(文件和ftp子部分)
答案 1 :(得分:1)
no-cors
模式仅适用于CDN内容,例如脚本,CSS和图片,您不能用于获取数据,response.status = 0
是正确的行为