【问题标题】:HttpClient get return always null for any rest API对于任何其他 API,HttpClient 始终返回 null
【发布时间】:2018-01-01 18:01:03
【问题描述】:

我刚刚使用 angular/cli 并按照他们的教程创建了一个 Angular 应用程序。然后我决定使用 observables 和一个真正的 rest API 包含 http get 请求,并注意到 angular 总是为空。我尝试了几个公共休息 API(当我将 URL 放在浏览器中时它们确实返回 json 对象)但是当我控制台日志返回的对象总是空的。这是我使用公共 API 的服务的最后一个代码:

import { Injectable } from '@angular/core';
   import { Observable } from 'rxjs/Observable';
   import { of } from 'rxjs/observable/of';
   import { HttpClient, HttpHeaders } from '@angular/common/http';
   import { catchError, map, tap } from 'rxjs/operators';

   @Injectable()
   export class myService {

   private apiURL= 'https://jsonplaceholder.typicode.com/users';
    constructor(private http: HttpClient) { }


    getUsers() {
      console.log('calling get!');
      this.http.get('https://jsonplaceholder.typicode.com/users').pipe(
              tap(users => console.log(users))).subscribe(p => {console.log(p);});
      console.log('calling get finish!');  
     }
    }

有什么想法吗?

【问题讨论】:

  • 你为什么使用tap?只需订阅get,无需使用pipe 或其他任何东西。 this.http.get('...').subscribe(p => { console.log(p) });
  • 你怎么打电话给getUsers()?从技术上讲,这段代码应该可以工作
  • 好吧,没关系,tapdo 的别名,所以它不应该和你的 observable 混淆。你能创建一个 plunker 来重现这种行为吗?
  • 它总是返回 undefined(而不是 null),因为你的方法没有返回任何东西。在this.http.get(... 之前添加return。并删除对 subscribe() 的调用。组件必须订阅,而不是服务。为了能够使用 AJAX 访问外部 API,他们需要启用 CORS。如果没有,您将无法访问它们(无论通过在浏览器位置栏中粘贴 URL 是否有效)。
  • 您是否在您的 devtools 网络选项卡中看到正在完成的请求?你是如何调用这个函数的?请添加您的情况的最小示例

标签: angular rest typescript angular-httpclient


【解决方案1】:

感谢大家的回答!该问题似乎与我们用于测试调用的浏览器有关(Chrome Canary v65.0.3309.2 禁用了安全性以允许跨源请求)。 我们更改了配置以在其他浏览器中运行该应用程序,现在 HttpClient 工作正常... -.-

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 2019-05-05
    • 2022-01-21
    • 1970-01-01
    • 2016-05-31
    • 2015-08-15
    相关资源
    最近更新 更多