2017-03-02 68 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