如何在JavaScript中查询iTunessearchAPI?

我试图查询应用程序商店的信息给定的应用程序,但是我不断收到以下错误。

XMLHttpRequest cannot load https://itunes.apple.com/lookup?id=<some-app-id>. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://www.<some-website>.co.uk' is therefore not allowed access. The response had HTTP status code 501. 

我用来执行请求的代码如下。

有谁知道我可能会出错?

 var config = { headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET', 'Access-Control-Allow-Headers': 'Content-Type, X-Requested-With', } }; $http.get("https://itunes.apple.com/lookup?id=<some-app-id>", config).success( function(data) { // I got some data back! } ); 

编辑:这是一个显示我成功的方法大致进入一个AngularJS应用程序的沉睡者:

http://plnkr.co/edit/QhRjw8dzK6Ob4mCu6T6Z?p=preview

将这些标题添加到您的服务器将不会改变发生的事情。 需要通过iTunes API添加跨源头文件。

这不会发生,所以您需要做的是在您的网页中使用JSONP风格的callback。 在iTunessearchAPI页面上有一个例子。

http://www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.html

注意:为您的网站创buildsearch字段和脚本时,应该为xmlhttp脚本调用请求使用dynamic脚本标记。 例如:

 <script src="https://.../search?parameterkeyvalue&callback="{name of JavaScript function in webpage}"/> 

请注意那里的“callback”参数。 这是一个函数定义在您的JavaScript在全球范围内的网页,将被调用与请求的响应到'src'中的url。 该函数将数据放入您的页面或应用程序中。 你必须弄清楚如何。

在这个文档中使用的语言不是很清楚,因为你的API没有启用CORS,所以你必须做一些JSONP风格的解决方法。

如果你需要dynamic添加一个脚本标记(一次获取数据是不够的),你可以尝试这个教程:

dynamic添加脚本标签与可能包括document.write的src

一般来说,API可能是为后端使用(不受跨源问题的影响),而不是用于客户端获取。

你可以使用$http.jsonp

 $http.jsonp("https://itunes.apple.com/lookup", { params: { 'callback': 'functionName', 'id': 'some-app-id' } }); 

其中functionName是stringforms的全局定义函数的名称。 你可以在你的模块中重新定义它,以便它可以访问$ scope。

文档

使用angular度2:

 constructor(private _jsonp: Jsonp) {} public getData(term: string): Observable<any> { return this._jsonp.request(itunesSearchUrl) .map(res => { console.log(res); }); }