【问题标题】:Angular 4 doesn't send some requestsAngular 4 不发送一些请求
【发布时间】:2018-12-22 21:00:28
【问题描述】:

我最近升级到了 Angular 4,Ionic 3。我在尝试在 web api 上调用 get 方法时遇到了一些问题。奇怪的是,我在其他地方重用了这段代码,而且效果很好。

我唯一的猜测可能是它与新的 HTTPClient 模块有关,或者与 RxJS/map 相关

目前我有一个看起来像这样的 HttpInterceptor:

export class HttpInterceptor extends Http {
    constructor(backend: ConnectionBackend, defaultOptions: RequestOptions, public authManager: AuthenticationProvider) {
        super(backend, defaultOptions);
    }

    get(url: string, options?: RequestOptionsArgs): Observable<Response> {
        console.log('request being made to:' + url);
        var requestOptions = this.getRequestOptionArgs(options);
        return super.get(url, requestOptions);
    }
    //... 
}

这是我的 HttpFactory

export function httpFactory(xhrBackend: XHRBackend, requestOptions: 
RequestOptions, authManager: AuthenticationProvider): Http {
    return new HttpInterceptor(xhrBackend, requestOptions, authManager);
}

在我的 app.Module 中,我已经在提供程序中注册了因子,如下所示:

{ provide: Http, useFactory: httpFactory, deps: [XHRBackend, RequestOptions, AuthenticationProvider]  }

我创建了一个提供程序库,它与我的服务链接它有一个方法 GetList

getList(pageSize?: number, pageNumber?: number): Observable<Page<T>> {
    const searchParams = this.GetSearchParams(pageSize, pageNumber);
    const requestArguments: RequestOptionsArgs = new RequestOptions({ search: searchParams });
    return this.http.get(`${this.apiUrl}/${this.route}`, requestArguments).map(res => {

        const items = <T[]>res.json();
        const mappedItems = items.map(e => this.mapEntity(e));
        return mappedItems;
    });
}

我在从页面点击按钮时调用它

loadLocations() {
  this.baseProvider.getList(10, 1).map(t => {
    this.locations = t.items
  });
}

当我运行加载位置时,我已经浏览了代码,我看到我的 HTTP 超级用户被调用,我的控制台日志:

request being made to:http://localhost:50926/api/locations

然而,当我查看 chrome 网络选项卡时,没有发送任何内容。此外,此代码是通用的,并且在其他地方也可以正常工作。

既然我已经升级到 Angular 4,我必须遵守 HTTP 拦截器的新变化吗?

【问题讨论】:

  • 除非您订阅您的 observable,否则不会发出 HTTP 请求
  • 呸,我把地图和订阅搞混了,请发帖作为答案,这样我就可以相信你了

标签: angular html typescript ionic3


【解决方案1】:

您还需要订阅,否则不会发出 HTTP 请求。

.map 只是用来转换响应。

【讨论】:

    【解决方案2】:

    试试这样的。

     let API_ENDPOINT = "https://stackoverflow.com/";
     let some_params = "params_here";
    
     this.http.get(this.API_ENDPOINT + this.some_params).subscribe(res => {
       console.log(res);
     });
    

    需要订阅您的请求。

    【讨论】:

      猜你喜欢
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-12
      • 2018-08-04
      • 2018-08-19
      • 1970-01-01
      • 2019-06-12
      相关资源
      最近更新 更多