http.put请求在Angular2中执行两次

时间:2016-12-16 17:13:37

标签: angular

我正在尝试更新从Angular2应用程序调用API的公司记录。我在调试时注意到http调用正在执行两次。我发现另一个stackoverflow thread与此相同,答案是由于冷热Observables而添加.share()。我已将此添加到我的http调用中,但这并没有解决问题。我感谢任何帮助!

enter image description here

company.service.ts

update(company: Company): Observable<Company> {
    return this._http.put(URL_COMPANY, JSON.stringify(company), { headers: this.headers })
        .map((res: Response) => company).share();
}

getCompanies() {
    return this._http.get(URL_COMPANY)
        .map((response: Response) => response.json()).share()
        .catch(this.handleError);
}

getCompany(id: number): Promise<Company> {
    const url = `${URL_COMPANY}/${id}`;

    return this._http.get(url)
        .toPromise()
        .then(response => response.json() as Company)
        .catch(this.handleError);
}

company.component.ts

    ngOnInit(): void {


                this.route.params.switchMap((params: Params) => this.companyService.getCompany(+params['id']))
                .subscribe(company => this.company = company);
    }    

save(): void {
        this.companyService.update(this.company).subscribe(
           (worked) => { console.log("success")},
           (error) => { console.log("failed")}
        );
    }

1 个答案:

答案 0 :(得分:4)

第一个电话是Preflighted requests,用于CORS。

Same-origin policy默认禁止跨域请求,因此首先请求检查跨域请求的容差。

如果单击第一个请求,您会看到“请求方法:选项”,以及Angular HTTP模块发出的此预检请求,您无法对其执行任何操作。