angular - 无法使用 Angular 2 rc5 发出 http 请求

标签 angular xmlhttprequest

我刚刚升级到 Angular 2 RC 5 并且由于我无法弄清楚的原因,我无法发出任何 http 请求(即请求从未发出/不显示在浏览器日志中)。

这是在今天升级之前一直有效的代码。

console.log("Let's call github");
let url = 'https://raw.githubusercontent.com/angular/angular/master/LICENSE';
return this.get(url).do(d=>console.log('success'));

当我的组件调用包含此代码的函数时,输出了Let's call github,但随后没有发出请求。我确定 @angular/http 中的 ObservableHttp 已正确导入,因为相同的代码今天早上有效。我的第一个想法是我缺少 HttpModule,但我已经确认我将它导入了我的主 AppModule

事实上,如果我注释掉 HttpModule 导入,我看不出有什么不同。报错一样,如下:

Exception: TypeError: this._body is null

这是堆栈跟踪的摘录(底部是调用上面引用的函数的行): enter image description here

最佳答案

2016-08-12更新

这个问题已经解决,可能会在下一个版本中修复。当前的解决方法是在 GET 请求中跳过 content-type 设置,或者将 body='' 显式设置为请求选项。

链接:Gihub discussion

原始答案

错误似乎与我在每个 http 请求之前运行的函数中的代码块有关。因为我与之交互的 API 需要 JSON 内容,所以我有以下内容(options 指的是用于每个请求的 RequestOptions 对象):

//set content to JSON
if(!options.headers.has("Content-Type")){
    options.headers.append("Content-Type", "application/json")
}

如果我注释掉这些行,请求就成功了。所以我在想,从 Angular 2 rc 5 开始,如果请求正文为空,这个 block 就会抛出一个错误(就像我从 OP 发出的 get 请求一样) ).

如果我的直觉是正确的,这种行为变化是由 this commit 引起的(rc 5 的新手)

fix(http): convert objects passed to requests into a string

我敢打赌,当我设置内容类型 header 时,Angular 会尝试提供帮助并为我对请求主体进行字符串化。当然没有GET,因此错误。

关于angular - 无法使用 Angular 2 rc5 发出 http 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38908973/

相关文章:

javascript - 谷歌浏览器扩展 "content"脚本是否被沙盒化?

Angular 2 HTTP POST 执行 OPTIONS 调用

html - 如何在 Angular 中打印一条 MySqL 记录的数据

angular - Azure Web 应用程序服务 - Angular 应用程序调用 login.microsoft.com CORS 问题

javascript - selectSingleNode 有效但 selectNodes 无效

javascript - 为什么在使用 setRequestHeader 制作 xmlhttprequest 时无法设置 cookie 和 set-cookie header ?

javascript - 将 FormData 转换为查询字符串的更简单方法

Angular4引用html元素而不使用模板变量

angular - 使用 stub 测试 Angular 服务

PHP Stream_copy_to_stream 在本地服务器上无法正常工作