【发布时间】:2013-12-17 09:26:32
【问题描述】:
我正在尝试以 JSON 格式从 Web API 检索数据。 而且我得到“请求的资源上没有'Access-Control-Allow-Origin'标头。”错误,我明白我为什么会得到这个,但不知道接下来我需要做什么才能让我从不同的域中获取数据。我最近很快就了解了 JSONP 和其他东西,但我很难理解我需要做什么。
$(document).ready(function() {
$.getJSON('http://www.thewebsite.net/json',
function(value) {
document.write(value.id);
});
});
【问题讨论】:
-
标准 JSON 请求受同域策略限制,这意味着在域 A 上运行的脚本无法访问域 B 上的数据。您调用的 API 是否特别提到了支持 JSONP(带有回调范围)?如果您不确定,请尝试在浏览器中加载
http://www.thewebsite.net/json?callback=foo并查看输出是否以foo开头。如果是这样,则支持 JSONP,您可以执行learn.jquery.com/ajax/working-with-jsonp 之类的操作来访问数据。 -
在页面加载后不要使用
document.write...会清除页面中的所有内容。仅在特殊情况下使用它的最佳做法 -
@Graham jsonp的方法我试过了,不认为网站支持。
-
在stackoverflow.com/questions/8537601/…查看答案;这是使用 YQL 在跨域 URL 访问 JSON,然后将其包装在回调中。
-
我以前读过关于 YQL 的文章,我想我明白了这个概念,但是我已经创建了一个 PHP 代理,我将来会研究 YQL 但我一直在敲我的脑袋靠在砖墙上几天,所以现在。感谢您的建议