我想使用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);
}
答案 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({ .... })
这就是失败的原因,因为无法更改回调方法名称。