如何处理jsonp请求的超时?我在jsonp.get()方法返回的observable上有10秒超时,但即使达到超时,请求仍保留在浏览器中。超过1-2分钟后,我在控制台中收到此错误:
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());
}
答案 0 :(得分:1)
JSONP
实际上是在页面中添加<script>
标记。 Angular只是从文档中删除节点(这适用于IE和Edge,但在Firefox中你必须使用document.onbeforescriptexecute
,不知道Chrome如何处理这个),但脚本仍在加载并最终死亡浏览器超时和日志到控制台。