1

我正在尝试对以下 API 进行 JSONP 调用:https ://api.openrates.io/latest

我的服务代码:

this.http
    .jsonp<Response>("http://api.openrates.io/latest", "callback")
    .subscribe(res => console.warn(res));

从 DevTools 网络选项卡中,我可以看到请求成功并且我得到了一个 JSON 对象:

在此处输入图像描述

但是我得到以下异常,我无法正确订阅响应:

在此处输入图像描述

我进行 JSONP 调用的方式有问题吗?还是服务器回答了问题(JSON 而不是回调)?为了完整起见,我使用 Angular 7 和 Angular CLI。

4

3 回答 3

1

问题在于响应类型。它非常纯 json 类型,但jsonp格式应该看起来像 -

/**/ng_jsonp_callback_7({,…});
has_more: false
items: [{new_active_users: 9, total_users: 9580180, badges_per_minute: 5.37, total_badges: 28924187,…}]
quota_max: 300
quota_remaining: 298 

因此,jsonp您可以使用get方法而不是使用。

工作副本在这里https://stackblitz.com/edit/angular-http-jsonp-yd9z1r

于 2018-10-28T16:56:59.963 回答
0

可能是,您应该尝试使用可管道运算符调用 .map 。

return this.http
    .jsonp<Response>("http://api.openrates.io/latest", "callback").pipe(
       map(res=>res),
       tap(res=>console.log(res))
    );

还要检查 JSON 响应是否有效。

于 2018-10-28T17:20:15.097 回答
0

暂时,如果你只需要在本地测试你的 API 端点,你可以运行一个新的 Chrome 会话,其中 web 安全被禁用。

您可以点击 Window + R 然后执行此脚本。

chrome.exe --user-data-dir="C://Chrome dev session" --disable-web-security
于 2021-04-30T03:06:02.480 回答