2017-03-02 36 views
1

如何處理jsonp請求的超時?我對jsonp.get()方法返回的觀察值有10秒超時,但即使超時已到,請求仍保留在瀏覽器中。經過1-2分鐘的超時我收到控制檯此錯誤:如何避免jsonp請求發生超時錯誤?

GET https://myserver/?url=asdf&callback=ng_jsonp.__req0.finished 網:: ERR_CONNECTION_TIMED_OUT browser_jsonp.js:64

在我的組件要打JSONP請求和訂閱它是這樣的:

this.service.jsonp(url).subscribe(
    (response) => { this.handleResponse(response); }, 
    (err) => { this.handleError(err); } 
); 

這是我的服務JSONP方法:

jsonp(url: string): Observable<any> { 
    let params = new URLSearchParams(); 

    params.set('url', url); 
    params.set('callback', 'JSONP_CALLBACK'); 

    return this.jsonp.get('https://myserver', {search: params}) 
    .timeout(10000) 
    .catch((err: Response) => Observable.throw(err)) 
    .map((response: Response) => response.json()); 
} 

回答

1

JSONP實際上是將<script>標記添加到頁面。 Angular只是從文檔中刪除節點(這對IE和Edge是好的,但是在Firefox中你必須使用document.onbeforescriptexecute,不知道Chrome如何處理這個問題),但是腳本仍然在加載,並且最終隨着瀏覽器超時和日誌安慰。

+0

謝謝你的回答。所以基本上,你是說我無法捕捉由jsonp請求引起的錯誤,因此也無法通過腳本標記? – RichieRock

+0

爲什麼你需要抓住它? Chrome只是將資源加載錯誤打印到控制檯,以方便您使用。 – kemsky