2017-02-26 99 views
0

我有一個角度爲2的應用程序,在我的服務中調用Web服務器兩次,當它應該調用一次。Angular 2發佈請求兩次

在session.service.ts

createSession(sessionName:any) 
{ 
    return this._http.post(this._sessionUrl + "/create/"+sessionName.sessionName,{}).map((res: Response) => res) 
    .do(data => console.log('Session created')) 
    .catch(this.handleError); 
} 

和在組件

createSession(name: string): void { 
    this._sessionService.createSession(name).subscribe(
    () => this.RedirectToSessionPage(), 
    () => this.ShowError() 
    ); 

}

我已讀

和嘗試添加.publish()。引用計數()和.share(),但仍然要兩次到服務器。有人知道如何解決它嗎?

+0

不符合您發佈的代碼。發佈一個plunkr來重現這個問題。 –

+1

您確定您沒有被OPTIONS預檢困惑嗎? – jonrsharpe

+0

你創建了什麼樣的會話? –

回答

0

正如@jonrsharpe所暗示的,聽起來您似乎看到了預檢OPTIONS請求和後續POST。 當從遠程服務器訪問數據(服務器與您的角度2前端不在同一地點)時使用預檢。並決定如何爲跨源請求訪問服務器。 (CORS)

最簡單的方法來檢查這是怎麼回事是通過您使用的任何瀏覽器的開發工具(對於Chrome按F12導航到網絡選項卡,並觀看您的http請求)。

這應該給你,如果它是一個選項,然後POST(CORS)或指示,如果你確實做相同的通話兩次(在這種情況下,可能會需要一個plunkr!)

希望幫助,對不起如果這是顯而易見的!

+0

另一種選擇是使用第三方軟件(如https://www.wireshark.org/)來監視網絡流量以查看真正發生的情況。我同意它可能是預檢請求(非常容易混淆:D) –

+0

謝謝,我今天會試試! – JonR