我正在尝试将forecast API与我的angular2应用程序一起使用 . 但是,当我尝试访问API时,我得到了一个Cross-Origin错误 . 知道如何解决这个错误吗?
search(latitude: any, longitude: any){
console.log(latitude);
console.log(longitude);
let body = 'https://api.forecast.io/forecast/APIKEY/'+latitude+','+longitude ;
console.log(body);
this.http.get(body)
.map(
response => response.json()
).subscribe(
data => console.log("Data: "+data),
err => console.log("Error: "+err),
() => console.log('Get Complete')
);
}
错误
跨源请求已阻止:同源策略禁止在https://api.forecast.io/forecast/APIKEY/37.8267,-122.423读取远程资源 . (原因:缺少CORS头'Access-Control-Allow-Origin') .
立即使用JSONP进行更新
let body = 'https://api.forecast.io/forecast/APIKEY/'+latitude+','+longitude + '?callback=?' ;
console.log(body);
this.jsonp.get(body)
.map(response => response.json())
.subscribe(
data => console.log("Data: "+data),
err => console.log("Error: "+err),
() => console.log('Get Complete')
);
错误
Error0.def29191127bbc3e0100.hot-update.js:59:10 Object {_body:"JSONP injected script did not invok…",status:200,ok:true,statusText:"Ok",headers:Object,type:3,url:“https://api.forecast.io/forecast/60 ...”} 0.def29191127bbc3e0100 . hot-update.js:61:10语法错误:期望表达式,得到'==='
3 回答
查看angular.io上的cors位
https://angular.io/docs/ts/latest/guide/server-communication.html#!#cors
像下面的东西(从上面)
对于forecast.io,您应该使用JSONP . 使用jQuery执行此操作的最简单方法是添加
?callback=?
以请求URL:我不是Angular 2的专家,但是阅读文档看起来你需要导入Jsonp然后添加一个回调 . 更多文档here - 请参阅
app/wiki/wikipedia.service.ts
部分 .我觉得下面的代码会对你有用
您遇到此问题是因为您发送的标头与后端中的标头不匹配 .
假设您发送以下标头:
所以像
Authorization
,Content-type
和Access-Control-Allow-Origin
这样的 Headers 应该与后端允许的 Headers 相匹配 .所以在后端
Access-Control-Allow-Headers
应该有以上所有 Headers :所以在
Access-Control-Allow-Headers
中你必须传递从前端发送的所有 Headers :'Authorization','Content-type'和'Access-Control-Allow-Origin' .当您使用上述概念时,它将完美地工作 .
希望这篇文章对你有所帮助
谢谢