【问题标题】:JQuery.getJSON - 'Access-Control-Allow-Origin'JQuery.getJSON - '访问控制允许来源'
【发布时间】: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 但我一直在敲我的脑袋靠在砖墙上几天,所以现在。感谢您的建议

标签: jquery getjson


【解决方案1】:

好的,如果您了解同源策略,您就知道默认情况下浏览器只能向同一主机发出请求。一种方法是在您的服务器 (PHP) 上调用服务器端脚本,然后 PHP 获取远程 JSON,并将数据返回到您的 javascript。搜索 JSONP 和 CORS 以获得替代解决方案。

JS:

$(document).ready(function () {
    $.getJSON(
        '/proxy.php',
        {
            id: 5
        },
        function (response) {
            var data = response.data;
            // do something with data
        }
    );
});

proxy.php:

    $id = (integer) $_GET['id'];
    $response = file_get_contents('www.some-remote-site.com/api/id=' . $id);

    return $response

【讨论】:

  • 好吧,正如我所说,我对此很陌生,除了制作购物车之外,我对 PHP 的经验相当少。有没有我可以借鉴的例子。
  • 添加了一个非常基本的例子。
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 2017-12-15
  • 2016-08-18
  • 2022-01-09
  • 2013-07-04
相关资源
最近更新 更多