我可以http://catfacts-api.appspot.com/api/facts?number=99通过Postman 点击这个终点并返回JSON
此外,我正在使用create-react-app,并希望避免设置任何服务器配置.
在我的客户端代码中我试图用fetch同样的东西,但我收到错误:
请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许来源' http:// localhost:3000 '访问.如果不透明响应满足您的需求,请将请求的模式设置为"no-cors"以获取禁用CORS的资源.
所以我试图传入一个对象,我的Fetch将禁用CORS,如下所示:
fetch('http://catfacts-api.appspot.com/api/facts?number=99', { mode: 'no-cors'})
.then(blob => blob.json())
.then(data => {
console.table(data);
return data;
})
.catch(e => {
console.log(e);
return e;
});
Run Code Online (Sandbox Code Playgroud)
有趣的是,我得到的错误实际上是这个函数的语法错误.我不确定我的实际fetch是否已损坏,因为当我删除{mode:'no-cors'}对象,并为其提供不同的URL时,它可以正常工作.
我也尝试传入该对象{ mode: 'opaque'},但这会从上面返回原始错误.
我相信我需要做的就是禁用CORS ..我错过了什么?
我尝试了对REST-API的ReactJS fetch调用,并希望处理响应.通话有效,我收到回复,我可以在Chrome开发工具中看到:
function getAllCourses() {
fetch('http://localhost:8080/course', {
method: 'POST',
mode: 'no-cors',
credentials: 'same-origin',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
objectClass: 'course',
crud: '2'
})
}).then(function (response) {
console.log(response);
return response.json();
}).catch(function (err) {
console.log(err)
});
}
Run Code Online (Sandbox Code Playgroud)
当我尝试处理响应时,我得到了一个"SyntaxError:意外的输入结束"
return response.json();
Run Code Online (Sandbox Code Playgroud)
console.log看起来像这样:
我的响应JSON看起来像这样,它是有效的,我用jsonlint检查它:
[
{
"0x1": {
"users": [],
"lectures": [],
"owner": "0x2",
"title": "WWI 14 SEA",
"description": null,
"objectClass": "course",
"id": "course_00001"
},
"0x2": {
"username": "system",
"lectures": [],
"course": null,
"solutions": [],
"exercises": [],
"roles": [
"0x3", …Run Code Online (Sandbox Code Playgroud)