如何避免jsonp请求的超时错误?

时间:2017-03-02 14:25:49

标签: http angular jsonp rxjs observable

如何处理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());
}

1 个答案:

答案 0 :(得分:1)

JSONP实际上是在页面中添加<script>标记。 Angular只是从文档中删除节点(这适用于IE和Edge,但在Firefox中你必须使用document.onbeforescriptexecute,不知道Chrome如何处理这个),但脚本仍在加载并最终死亡浏览器超时和日志到控制台。