首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Angular2 -跨域请求被阻止

Angular2 -跨域请求被阻止
EN

Stack Overflow用户
提问于 2016-08-27 23:04:40
回答 3查看 6.4K关注 0票数 0

我正尝试在我的angular2应用程序中使用forecast应用程序接口。但是,当我尝试访问API时,我得到了一个跨区域错误。你知道我该怎么修复这个错误吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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立即更新

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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对象{ _body:"JSONP注入脚本未调用…“,status: 200,ok: true,statusText:"Ok",headers: Object,type: 3,url:"https://api.forecast.io/forecast/60…“}0.def29191127bbc3e0100.hot-update.js:61:10 SyntaxError:预期表达式,已获取'===‘

EN

回答 3

Stack Overflow用户

发布于 2016-08-27 23:07:12

对于forecast.io,您应该使用JSONP。使用jQuery的最简单方法是将?callback=?添加到请求URL:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$.getJSON('https://api.forecast.io/forecast/<API KEY>/' + latitude + ',' + longitude + "?callback=?", function(data) {
   console.log(data);
});

我不是Angular 2的专家,但阅读文档后,您看起来需要导入Jsonp,然后添加一个回调。更多文档here --请参阅app/wiki/wikipedia.service.ts一节。

我想像下面这样的代码会对你有用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let body = "https://api.forecast.io/forecast/<API KEY>/' + latitude + ',' + longitude + '?callback=?'";
return this.jsonp
           .get(body)
           .map(response => <string[]> response.json()[1]);
票数 0
EN

Stack Overflow用户

发布于 2016-08-27 23:14:53

查看angular.io上的cors位

https://angular.io/docs/ts/latest/guide/server-communication.html#!#cors

类似于下图(来自上图)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
return this.jsonp
           .get(wikiUrl, { search: params })
           .map(response => <string[]> response.json()[1]);
票数 0
EN

Stack Overflow用户

发布于 2017-06-07 16:15:24

你遇到这个问题是因为你发送的报头与后端的报头不匹配。

假设您发送以下报头:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
contentHeaders = new Headers();
contentHeaders.append('Authorization', 'Your token used in app'); 
contentHeaders.append('Content-Type', 'application/json'); 
contentHeaders.append('Access-Control-Allow-Origin', '*');

因此,像AuthorizationContent-typeAccess-Control-Allow-Origin这样的标头应该与后端允许的标头匹配。

所以在后端Access-Control-Allow-Headers应该有上面所有的头:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Authorization, content-type, Access-Control-Allow-Origin");

因此,在Access-Control-Allow-Headers中,你必须传递从前端发送的所有头部:'Authorization','Content-type‘和'Access-Control-Allow-Origin’。

当你使用上面的概念时,它将会完美的工作。

希望这篇文章能对你有所帮助。

谢谢

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39186578

复制
相关文章
MySQL 特殊字符
SQL 注释是用来在 SQL 语句中添加对代码的解释说明。SQL 支持两种类型的注释符号。
恋喵大鲤鱼
2023/10/12
1K0
BashShell常量和特殊字符
其中,base 是一个 2 到 64 的十进制数值,表示数字的基数;n 是在 base 基数中的数字的值。如果忽略 base# ,则默认以 10 为基数。n 中的每一位数如果大于 9,则依次以小写字母、大写字母、@、_ 表示(最大表示到十进制中的 63,因为 base 最大为 64)。
hotarugali
2022/02/28
5.6K0
LaTeX特殊字符和符号
无论什么字体,LaTeX以一个反勾号或重音符(`)当做左引号,以一个正勾号或直立引号(')当做右引号。
hotarugali
2022/03/17
6.2K0
LaTeX特殊字符和符号
Mysql去除字符串中的特殊字符及varchar转int
Mysql中有varchar类型字段,并且为:123,456 形式,需要对其进行排序,并根据条件筛选出前5条
itze
2022/10/31
3.6K0
Shell特殊字符
shell既是类Unix操作系统的命令解析器,用于解释执行用户输入的一连串命令,它类似于DOS下的command和后来Windows的cmd.exe。同时shell也是一种程序设计语言。作为命令解释型的脚本语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它预定义了各种环境变量,保留了一些关键字以及一些特殊字符的含义,并提供了许多在高级语言中才具有的控制结构,包括循环和分支判断。
恋喵大鲤鱼
2018/08/03
5.2K0
HTML特殊字符
HTML 原始码 显示结果 描述 &lt; < 小於号或显示标记 &gt; > 大於号或显示标记 &amp; & 可用於显示其它特殊字符 &quot; " 引号 &reg; ® 己注册 &copy; © 版权 &trade; ™ 商标 &ensp; 半方大的空白 &emsp; 全方大的空白 &nbsp; 不断行的空白
小小许
2018/09/20
3.7K0
常用的HTML和CSS(content)特殊字符图标
​之前折腾WordPress主题的时候感觉Font Awesome太过庞大,好多图标字体基本都用不上,加载起来太慢了,于是自己折腾了一套简单的图标字体,但在完善主题过程中才发现字体太少不够用(有些图标当时没想到),重新折腾又要重新来一次太麻烦。于是想到可以用css的content,通过伪元素将一些符合的unicode字符集插入其中。
楚客追梦
2022/10/30
3.6K0
Shell常用的特殊字符
点号在不同场景有着不同的含义,在目录路径中,一个点代表当前工作目录,两个点代表父目录;当一个文件以点号开头,表示一个隐藏文件;在正则表达式,点号代表匹配单个字符;
用户1679793
2020/10/29
8.1K0
常用的HTML和CSS(content)特殊字符图标
之前折腾主题的时候感觉Font Awesome太过庞大,好多图标字体基本都用不上,加载起来太慢了,于是自己折腾了一套简单的图标字体,但在完善主题过程中才发现字体太少不够用(有些图标当时没想到),重新折腾又要重新来一次太麻烦。于是想到可以用css的content,通过伪元素将一些符合的unicode字符集插入其中。
楚客追梦
2022/11/11
4.6K0
JXL读写Excel
使用JXL生成Excel文 package test.jxl; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import org.apache.commons.lang3.RandomStringUtils; import java.io.File; impor
前Thoughtworks-杨焱
2021/12/08
2800
Makefile中特殊字符和关键字
.Phony 是一个特殊的工作目标,它后面的并不是一个实际文件名:只是在显式请求时执行命令的名字;而且肯定要视为未更新。使用 .Phony 的原因在于:
hotarugali
2022/03/11
8380
AJAX传递特殊字符的方法
AJAX传递特殊字符的方法 采用Ajax传递参数加号(+)和与符号(&)时候,服务端获取到的参数并不如意! (1) "+"号:JavaScript解析为字符串连接符,所以服务器端接收数据时"+"会丢失。 (2)"&":JavaScript解析为变量连接符,所以服务器端接收数据时&符号以后的数据都会丢失。 解决办法:在传到服务端之前先将参数中的"+"和"&"符号都编码一下 function filter(str) { str = str.replace(/\+/g,"%2B"); str =
wangxl
2018/03/07
2.8K0
java 对于表情和特殊字符的转码解码处理
转码然后插入到DB当中 String encodestr=URLEncoder.encode("需要转码的内容", "utf-8") 将encodestr插入数据库中 解码然后显示到页面当中 String decodestr=URLDecoder.decode("需要解码的内容", "utf-8") 在页面展示decodestr
用户4191150
2021/08/12
3.8K1
插入"&"特殊字符的几种思考
一位铁杆朋友,今天问了个问题,写了一个Python程序,从文件读取数据,其中可能包含“&”这种特殊字符,为了让其能插入Oracle,需要做什么处理?
bisal
2020/04/02
2.3K0
mysql命令创建数据库库名特殊字符
在使用mysql命令进行数据库创建时,发现“-”等特殊字符无法使用,提示sql语句语法错误。
程序新视界
2022/05/06
2.8K0
特殊字符乱码问题
1、使用标签 建议用(标签可以控制转换特殊字符): <html:text property=“instruction” readonly=“true” styleClass=“mylongreadonly” size=“32”/> <input name=“instruction” type=“hidden” value=”<mycim2:write name=“object” property=“instruction” filter=“true”/>” > <input name=“instruction” type=“hidden” value=”<bean:write name=“object” property=“instruction” filter=“true”/>” >
全栈程序员站长
2022/06/27
2.7K0
iOS去除特殊字符
// 清除特殊字符 + (NSString *)cleanSpecialCharacters:(NSString *)text { NSString *strResult = nil; NSMutableString *originString = [text mutableCopy]; NSCharacterSet *cs = [NSCharacterSet characterSetWithCharactersInString:@"~!@#$%^&*()+={}':;',[]\\.
Raindew
2019/05/17
3.3K0
转义JavaScript特殊字符
大家可以举一反三,触类旁通,反正,双引号和单引号可以配合着使用,把我上面的案例看懂,你就能灵活的运用了。
IT工作者
2022/01/05
4.1K0
点击加载更多

相似问题

Rails 3 AJAX问题- UJS

10

jquery_ujs和rails的问题-ujs问题ajax页面

218

基本UJS AJAX Rails 3.0更新问题

22

Rails UJS ajax:完全不触发

13

Rails UJS与URL params问题

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文