2015-04-04 72 views
1

我想查詢在App Store上的應用程序給定的信息,但我不斷收到以下錯誤。我如何可以查詢在JavaScript中的iTunes搜索API?

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! 
     } 
    ); 
+1

丹尼爾與$ http.jsonp是更好的解決方案 – OMGPOP 2015-07-07 12:31:20

回答

1

編輯:這裏是顯示大致得到它變成一個AngularJS應用我的成功方法一plunker:

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

添加這些頭文件到您的服務器不會改變正在發生的事情。需要通過iTunes API添加跨源頭文件。

這是不會發生的,所以你需要做什麼,而不是在您的網頁使用JSONP樣式的回調。 iTunes搜索API頁面上有一個示例。

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

注:當您在網站上創建搜索字段和腳本,你應該 使用動態腳本標記您的XMLHTTP腳本調用請求。 例如:

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

注意 '回調' 參數存在。這是你的JavaScript全局定義將調用來自於「src」中請求的URL的響應頁面上的功能。該函數將數據放入頁面或應用程序中。你必須弄清楚如何。

這是一個恥辱,本文檔中使用的語言是不清晰的,因爲你必須做一些JSONP風格的解決辦法,因爲他們沒有對他們的API啓用CORS。

如果您需要動態添加腳本標籤(讀取數據一次是不夠的),你可以試試這個教程:

Dynamically add script tag with src that may include document.write

一般的API可能是適合使用的後端(不受影響通過交叉來源問題),而不是爲客戶端提取。

6

您可以使用$http.jsonp

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

functionName是字符串形式的全局定義函數的名稱。您可以在模塊中重新定義它,以便它可以訪問$ scope。

Documentation

0

採用了棱角分明2:

constructor(private _jsonp: Jsonp) {} 

public getData(term: string): Observable<any> { 

    return this._jsonp.request(itunesSearchUrl) 
     .map(res => { 
      console.log(res); 
      }); 
}