2013-10-18 46 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/

相关问题