【发布时间】:2017-09-30 10:25:26
【问题描述】:
我正在尝试通过他们的 API 加载 Behance 项目数据。无论是 localhost 还是 prod,我都会收到以下错误 -
Fetch API 无法加载 XXX。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'http://localhost:5000' 不允许访问。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。
不知道如何解决这个问题。 我在下面 Portfolio 组件中的代码 --
getPortfolio = () => {
const USER_ID = `XXX`,
PROJECT_ID = `XXX`,
API_KEY = `XXX`;
const BEHANCE_URL = `https://api.behance.net/v2/users/${USER_ID}/projects?client_id=${API_KEY}`;
console.log(BEHANCE_URL);
fetch(BEHANCE_URL, {
method: 'get',
dataType: 'jsonp',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
}
}).then((response) => {
return response.json();
}).then((responseData) => {
return responseData;
}).catch((err) => {
return err;
});
}
更新:使用 jQuery ajax 代替获取。 --
$.ajax({
url: BEHANCE_URL,
type: "get",
data: {projects: {}},
dataType: "jsonp"
}).done((response) => {
this.setState({
portfolioData: response['projects']
});
}).fail((error) => {
console.log("Ajax request fails")
console.log(error);
});
【问题讨论】:
-
你知道为什么使用 jquery 它不会抛出 CORS 错误吗?因为不应该是这样。看看这个,stackoverflow.com/questions/25923796/cors-error-with-jquery。我很想知道 jquery 是如何代替 fetch 工作的。
-
我刚刚在一个项目中实现了它,它确实足够有效。我听说使用
fetch()和jQuery,您可以规避CORS 错误,而且显然可以。
标签: api reactjs cors fetch behance-api