1

我在使用 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);

有人知道发生了什么吗?

4

3 回答 3

2

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

不久前我遇到了这个问题,并使用 YQL 创建了 JSONP 回调(将数据包装在 javascript 函数中)。换句话说,脚本标签不受同源策略的约束

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 链接

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

于 2012-09-22T21:18:20.263 回答
0

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

于 2012-09-22T21:13:48.943 回答
0

您的请求违反了同源政策

简而言之,您不能对不同的域进行 ajax 调用。您可以使用带有服务器端语言(如 php、java、nodejs 或其他)的 http 请求来完成此操作。

于 2012-09-22T21:14:27.413 回答