Angular 4的JSONP回调问题

时间:2017-08-01 12:20:58

标签: javascript angular typescript jsonp response

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

它给我以下错误: -

  

VM637 global-functions.helpers.ts!已编译:12响应{_body:   "注入JSONP的脚本没有调用回调。",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);
      }

1 个答案:

答案 0 :(得分:1)

根据我自己的分析,这就是它无效的原因: -

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

将返回类似于的响应: -

sun({   ....  })

等等。

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

它将呼叫转移到:

<强> ng_jsonp .__ req0.finished( { ... })

并等待此回调函数拦截响应。

然而,问题是公共闪烁api,网址无法自定义: -

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

的网址时

响应始终以: -

开头

jsonFlickrFeed({   ....  })

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