【问题标题】:Unable to make http request with Angular 2 rc5无法使用 Angular 2 rc5 发出 http 请求
【发布时间】:2016-12-18 22:29:30
【问题描述】:

我刚刚升级到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/httpObservableHttp 已正确导入,因为今天早上同样的代码有效。我的第一个想法是我错过了HttpModule,但我已经确认我将它导入到我的主要AppModule

事实上,如果我注释掉 HttpModule 导入,我可以看到它没有任何区别。错误是一样的,如下:

Exception: TypeError: this._body is null

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

【问题讨论】:

    标签: angular xmlhttprequest


    【解决方案1】:

    2016 年 8 月 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 开始,如果请求正文为空,这个块会抛出一个错误(就像我来自 OP 的get 请求一样)。

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

    fix(http):将传递给请求的对象转换成字符串

    我敢打赌,当我设置内容类型标头时,Angular 会尝试为我提供帮助并将请求正文字符串化。当然没有GET,因此错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 2016-05-12
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 2017-10-09
      • 1970-01-01
      相关资源
      最近更新 更多