2016-12-16 3 views
2

Я пытаюсь обновить запись компании, вызывающую API из моего приложения Angular2. Я заметил, что при отладке HTTP-вызов выполняется дважды. Я нашел еще один stackoverflow thread, который идентичен этому, и ответ должен был добавить .share() из-за горячих и холодных наблюдений. Я добавил это к моему HTTP-вызову, но это не решило проблему. Я ценю любую помощь!HTTP.put запрос выполняется дважды в Angular2

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")} 
     ); 
    } 
+0

Сколько раз ваш метод save() и update() срабатывал? И у вас есть еще места, где вы подписываетесь на update()? – Nikolai

+0

Я поставил операторы console.log в событие click, и сам клик-событие запускается только один раз. Я обновил свой фрагмент кода, чтобы отразить это в моем ngOnInit(), который я подписываю, но этот вызов возвращает обещание, а не наблюдаемое. В противном случае я считаю, что это единственное место, которое я подписываю. – Flea

ответ

2

Первый вызов Preflighted requests который предназначен для CORS.

Междоменные запросы по умолчанию запрещены Same-origin policy, поэтому первым запросом является проверка допуска междоменного запроса.

Если вы нажмете на первый запрос, вы увидите «Метод запроса: ОПЦИИ», и эти Запросы с предварительным освещением, выполненные с помощью модуля Angular HTTP, вы ничего не можете с ним поделать.

Смежные вопросы