【问题标题】:iTunes Search API don't want to give me its datasiTunes Search API 不想给我它的数据
【发布时间】:2012-09-14 21:02:36
【问题描述】:

我在使用 iTunes 搜索 API 时遇到了一些问题。当我通过 URL(即http://itunes.apple.com/search?term=Reeder&country=fr&entity=software)直接访问时可以看到数据,但是当我通过简单脚本尝试时,数据不会加载。

var xhr = new XMLHttpRequest();

xhr.open('GET', 'http://itunes.apple.com/search?term=Reeder&country=fr&entity=software');
xhr.send();

xhr.addEventListener('readystatechange', function () {
    if (xhr.readyState === xhr.DONE && xhr.status === 200) {
        alert(xhr.responseText);
    }
}, false);

有人知道发生了什么吗?

【问题讨论】:

  • 你从哪里放的代码?

标签: javascript xmlhttprequest itunes


【解决方案1】:

正如其他人所说,您的请求违反了同源政策。

我前段时间遇到了这个问题,并使用 YQL 创建了 JSONP 回调(将数据包装在 javascript 函数中)。也就是说,script标签不受同源策略的约束

YQL:http://developer.yahoo.com/yql/ JSONP:http://en.wikipedia.org/wiki/JSONP(我假设你知道 JSON)

细节大家可以自己学习(JSONP的使用方法),我就举个例子吧。

您的 YQL 查询将是 select * from json where url='http://itunes.apple.com/search?term=Reeder&country=fr&entity=software'。如果将类型更改为 JSON(在控制台中),则可以为 JSONP 指定回调。控制台:http://developer.yahoo.com/yql/console Link

您创建一个脚本标签并将上面的链接/url 设置为源。如您所见,JSON 数据是用函数名包装的。您应该已经定义了回调函数,它将在加载 YQL/JSON 源时调用。然后该回调函数处理 JSON 数据。

【讨论】:

    【解决方案2】:

    这是您浏览器的一项安全功能...您无法使用 AJAX 访问存储在其他域下的内容。 Google 的“跨域 AJAX 请求”

    【讨论】:

      【解决方案3】:

      您的请求违反了same origin policy

      简而言之,您无法对不同的域进行 ajax 调用。您可以使用 php、java、nodejs 或其他服务器端语言的 http 请求来完成。

      【讨论】:

        猜你喜欢
        • 2015-06-25
        • 2012-08-01
        • 2017-10-25
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-16
        相关资源
        最近更新 更多