所以我有一个简单的getJSON()函数:
$.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 :(得分:5)
你的api url开头有一个空格......一旦我删除它,电话就会通过:
var apiURL = "https://itunes.apple.com/search" +
答案 1 :(得分: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);
}
});
上面的内容适用于浏览器控制台(在stackoverflow上)。它也适用于jsFiddle:http://jsfiddle.net/xYthU/
答案 2 :(得分:1)
浏览器将使用OPTIONS方法请求服务器。服务器必须响应以下标头以支持CORS。
如果我们使用OPTIONS方法请求https://itunes.apple.com/search网址。它会回复不支持的错误。
屏幕截图:https://blog.gaurangjadia.com/wp-content/uploads/2013/10/itunes.apple_.com_.png