2013-10-18 45 views
2

所以我有一個簡單的getJSON()函數:用Origin處理HTTP://本地主機不被訪問控制允許來源允許在沒有CORS頭

  $.getJSON(apiURL, function(data) { 
       console.log('success'); 
       if (data.results.length > 0) { 
        $(song).find('source').attr('src', data.results[0].previewUrl); 
        song.play(); 
       } 
       else { 
        console.log('No match found for track information specified.'); 
       } 
      }); 

apiURL是iTunes的API網址,如下定義:

  var apiURL =" https://itunes.apple.com/search" + 
       "?term=" + artist + "+" + album + "+" + title +· 
       "&media=music&entity=musicTrack&callback=?"; 

我得到的是Access-Control-Allow-Origin錯誤不允許的經典Origin localhost。我在這裏找到了一些答案,他們通常歸結爲使用$ .ajax並將dataType設置爲'jsonp',或使用.getJSON並提供'callback =?'。參數到URL,我已經在上面嘗試過了。這些似乎都沒有工作,我聽說他們可能已經過時了。什麼是最新的,最新的處理這個問題的建議?除了收集服務器上的數據。

+0

而不CORS標頭,不可能不使用服務器端代理,除非遠程API支持JSONP。 –

+0

是否可以使用jQuery添加CORS頭?另外,iTunes API似乎支持JSONP,討論'callback =?'參數在其文檔中,但我仍然得到該錯誤.... – user1427661

+0

不,Cors標頭必須由服務器添加。 –

回答

5

你必須在你的API網址的開頭空間......一旦我刪除,呼叫經歷:

http://jsfiddle.net/UU8tT/

var apiURL = "https://itunes.apple.com/search" + 
3

嘗試使用完整的.ajax方法,而不是.getJSON速記方法:

var terms = ["Halestorm"]; 
terms.forEach(function (val, i, arr) { 
    terms[i] = encodeURIComponent(val); 
}); 
$.ajax({ 
    "url": "https://itunes.apple.com/search", 
    "dataType": "jsonp", 
    "data": { 
     "term": terms.join('+'), 
     "media": "music", 
     "entity": "musicTrack" 
    }, 
    "error": function (jqXHR, textStatus, message) { 
     console.log(message); 
    }, 
    "success": function (data, textStatus, jqXHR) { 
     console.log(data); 
    } 
}); 

上述工作對我來說在瀏覽器控制檯(同時計算器)。這也適用於的jsfiddle:http://jsfiddle.net/xYthU/

相關問題