JSONP注入的脚本没有调用回调
我试图从Rest Api获取数据:
我试过如下:
var headers: Headers= new Headers({ 'dataType': 'jsonp'});
let options = new RequestOptions({ headers: headers });
return this.http.get('http://aaaddds.de/redmine/issues.json?limit=1200&callback=JSONP_CALLBACK', options)
.map(this.extractData);
它不工作,因为:
No 'Access-Control-Allow-Origin' header
所以当我尝试JSONP
let params = new URLSearchParams();
params.set('callback', 'JSONP_CALLBACK');
params.set('project_id', '7');
params.set('key', '42d3db30ab061a9f630df1f476c4d127f98d5ad2');
params.set('limit', '1200');
return this.jsonp.get('http://aaaddds.de/redmine/issues.json', { search: params })
.map(this.extractData);
它说 :
Uncaught ReferenceError:__ng_jsonp____req0finished未定义JSONP注入的脚本未调用回调
当我做一个JQuery的AJAX得到它的作品:
$.ajax({
url: url,
type: 'GET',
dataType: 'jsonp',
success: function (datsa: any) {
console.log(datsa);
},
error: function (e : any) { alert(e.toString) },
});
我认为你为你的回调提供的参数不是callback
函数。 事实上,这个名字取决于目标服务,可以是callback
, c
或其他东西...
要诊断您的问题,您应该查看浏览器中devtools的Network选项卡,以查看响应的内容。 它应该是这样的:
__ng_jsonp__.__req0.finished({ ... })
__ng_jsonp__.__req0
是__ng_jsonp__.__req0
内部处理的回调名称。
我解决了这个问题:设置一个变量:times
export class WikipediaService {
constructor(private jsonp: Jsonp) {
this.times=0;}
search (term: string) {
let wikiUrl = 'http://en.wikipedia.org/w/api.php';
let params = new URLSearchParams();
params.set('search', term); // the user's search value
params.set('action', 'opensearch');
params.set('format', 'json');
params.set('callback', `__ng_jsonp__.__req${this.times}.finished`);
this.times=this.times+1;
// TODO: Add error handling
return this.jsonp
.get(wikiUrl, { search: params })
.map(response => <string[]> response.json()[1]);
}
}
this._InstUrl = "your url";
let params1 = new URLSearchParams();
//params.set('search', term); // the user's search value
//params.set('action', 'opensearch');
params1.set('format', 'json');
//params1.set('callback', "ng_jsonp.__req0.finished");
params1.set('callback', "JSONP_CALLBACK");
return this._jsonp
.get(this._InstUrl, { search: params1 })
.map(response => { debugger; this.Result = response.json().data })
.subscribe(
(data) => {
debugger
console.log(this.Result);
},
(error) => {
debugger
console.log(error);
});
这一个100%工作PLZ检查
链接地址: http://www.djcxy.com/p/47559.html