我想使用 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/