javascript - Angular 4 的 JSONP 回调问题

标签 javascript angular typescript jsonp response

我想使用 flickr Jsonp 和 Angular 4 来检索图像。

它给了我以下错误:-

VM637 global-functions.helpers.ts!transpiled:12 Response {_body: "JSONP injected script did not invoke callback.", status: 200, ok: true, statusText: "Ok", headers: Headers…}

请在此处找到该问题的解决方案:-

https://plnkr.co/edit/oySgh2weZMOJddYA44Rp?p=preview

这是导致问题的代码:-

this.jsonp.request(`https://api.flickr.com/services/feeds/photos_public.gne?format=json&tags=&callback=JSONP_CALLBACK`).

      subscribe(images => {


      },
      (error) => {
        console.error(error);
      }

最佳答案

根据我自己的分析,这就是它不起作用的原因:-

callback=JSONP_CALLBACK 通常会更改被调用 Jsonp 的回调函数名称,使其与我在参数中给出的回调相同。\

例如:

https://itunes.apple.com/search?term=ff&media=music&limit=20&callback=JSONP_CALLBACK

将返回类似于以下内容的 json 响应:-

JSONP_CALLBACK ({ .... })

如果我提供类似于以下内容的网址:

https://itunes.apple.com/search?term=ff&media=music&limit=20&callback=sun

将返回类似于以下内容的响应:-

太阳({ .... })

等等。

当 Angular 看到类似的调用时:https://itunes.apple.com/search?term=ff&media=music&limit=20&callback=JSONP_CALLBACK

它将调用转移到:

ng_jsonp.__req0.finished( { ... })

并且它等待这个回调函数来拦截响应。

但是,问题是对于公共(public) flicker api,url 不可自定义:-

当我发送类似于:https://api.flickr.com/services/feeds/photos_public.gne?format=json&tags=&callback=JSONP_CALLBACK 的网址时

响应始终以:-

jsonFlickrFeed({ .... })

这就是它失败的原因,因为回调方法名称无法更改。

关于javascript - Angular 4 的 JSONP 回调问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45437644/

相关文章:

twitter-bootstrap - 带 Angular 4 的 Bootstrap 进度条

arrays - 元组的 TypeScript 数组

javascript - typescript 导致语法错误

javascript - var 名称 = 函数名称 (){ }; - 函数名称使用了两次

javascript - 如何创建谷歌标签管理器触发器

javascript - 如果在下拉菜单内发生单击,则阻止下拉菜单关闭

typescript - redux的typescript类型中CombinedState类型的原因

javascript - JS 网格中的图像无法完全加载

javascript - ng-hide完成后添加一个功能

html - Angular:用户登录时隐藏元素