在没有CORS头的情况下,Access-Control-Allow-Origin不允许处理Origin http:// localhost

时间:2013-10-18 21:12:12

标签: javascript jquery ajax json

所以我有一个简单的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的参数,我在上面尝试过。这些似乎都没有工作,我听到他们可能已经过时的隆隆声。处理这个问题的最新,最新建议是什么?除了收集服务器上的数据。

3 个答案:

答案 0 :(得分:5)

你的api url开头有一个空格......一旦我删除它,电话就会通过:

http://jsfiddle.net/UU8tT/

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。

  1. Access-Control-Allow-Headers:接受
  2. Access-Control-Allow-Methods:*
  3. Access-Control-Allow-Origin:*
  4. 如果我们使用OPTIONS方法请求https://itunes.apple.com/search网址。它会回复不支持的错误。

    屏幕截图:https://blog.gaurangjadia.com/wp-content/uploads/2013/10/itunes.apple_.com_.png