【发布时间】:2018-08-19 13:08:33
【问题描述】:
我一直在尝试创建一个 React 站点,该站点将从 API 获取 GET 响应并将其打印到我的 .html 文件中。我设法正确地获取了文件,但我无法访问服务器发送给我的 JSON 数据。
如果我在我的 Fetch-request 中使用 no-cors,我会得到一个不透明的响应,其中几乎没有任何内容,但是 如果我去开发者工具,我可以在那里找到我的数据并阅读它。如果我确实使用 cors,几乎是一样的。我收到 403 错误,但我的数据在浏览器内存中,但我的代码没有打印出来。我可以在开发者工具中找到 Network 的回复。
为什么服务器给我一个错误,但我仍然得到我的数据?如果它在浏览器中,我如何访问它?
class Clock extends React.Component {
constructor(props) {
super(props)
this.state = {data2: []}
this.apihaku = this.apihaku.bind(this)
}
componentDidMount() {
this.apihaku(),
console.log("Hei")
}
apihaku () {
fetch('https://#######/mapi/profile/',
{method: 'GET', mode:'no-cors', credentials: 'include',
headers: {Accept: 'application/json'}}
).then((response) => {
console.log(response);
response.json().then((data) =>{
console.log(data);
});
});
}
render() {
return <div>
<button>Button</button>
</div>
}}
ReactDOM.render(
<Clock />,
document.getElementById('content')
)
编辑:尝试建议后出现错误图像
https://i.stack.imgur.com/wp693.png
【问题讨论】:
-
能不能把this.apihaku()放到componentDidMount()里面看看
-
同样的错误,它一直给这句话:"response.json().then(data => { console.log("Heih2");" 错误信息是:Uncaught (in promise ) SyntaxError: Unexpected end of input. 我仍然可以在控制台中看到数据。
-
“为什么服务器给我一个错误,但我仍然得到我的数据?” - 我们怎么可能知道...?你认为我们面前有
https://#######/mapi/profile/的文档吗,因为你让我们很容易弄清楚你在这里实际谈论的是什么 API? “如果它在浏览器中,我如何访问它?” - 首先修复你在与这个神秘 API 交谈时做错的任何事情,这样它就不会 响应状态码,向浏览器发出信号“出现问题,丢弃响应正文”。 -
很抱歉,但我不确定我应该提供什么样的信息。我不确定错误消息是否足以使用代码。 API 是用于工作项目的,所以我不能真正透露地址。我从服务器获得的不透明响应带有代码 0,但是当我转到源时,有一个响应 200 OK,即数据所在的位置。我会添加一些图片来澄清。
-
首先删除
mode:'no-cors'。当您使用 mode: 'no-cors' 时,您明确指定您希望浏览器阻止您的前端代码访问响应正文或标头中的任何数据。请参阅stackoverflow.com/questions/43317967/… 和stackoverflow.com/questions/42254685/… 的答案