【问题标题】:Why does this JQuery JSON call fail?为什么这个 JQuery JSON 调用失败?
【发布时间】:2011-10-21 19:54:15
【问题描述】:

我正在尝试对返回 JSON 文件的 API 进行简单调用。我已确认我使用的 URL 有效并返回有效的 JSON。当我尝试使用此 JQuery 脚本获取 JSON 时,不会触发警报,这让我认为代码的 GET 部分有问题。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>

  <script>
    $(document).ready(function() {
        $.getJSON("http://open.nysenate.gov/legislation/2.0/search.json?term=stricken:true%20AND%20year:2009&callback=?", function(json) {
            alert("test");
        });
    });
 </script>
</head>
<body>
</body>
</html>

【问题讨论】:

  • URL 不返回 JSONP。如果你进行跨域调用,它必须返回 JSONP。

标签: jquery json get


【解决方案1】:

要绕过同源策略,您可以编写一个简单的后端脚本(PHP、perl、Python 等)来抓取所需的 URL 并将结果输出到您的脚本。然后,您只需将 AJAX 调用指向本地脚本而不是远程脚本。

【讨论】:

    【解决方案2】:

    不支持JSONP,试试yourself

    违反Same Origin Policy

    【讨论】:

      【解决方案3】:

      http://en.wikipedia.org/wiki/Same_origin_policy - 您不能在当前域之外进行 ajax 调用。正如其他答案所建议的那样,解决此问题的一种方法是使用 JSONP。

      【讨论】:

        【解决方案4】:

        我假设返回的 JSON 对象格式不正确,因为这会返回错误

        $(document).ready(function() {
            $.getJSON("http://open.nysenate.gov/legislation/2.0/search.json?term=stricken:true%20AND%20year:2009&callback=?",function(json){
                alert("dsf");
            })
          .error(function() { alert("error"); });
        
        });
        

        【讨论】:

        • 问题是您无法从外部域获取 JSON(或任何相关数据)......它必须是 JSONP 格式。 JSON本身是有效的,你可以复制到jsonlint.com自己看看。
        • 有没有办法让我在不修改 API 的情况下以 JSONP 格式获取它?
        • @jeffpm:不,服务器必须支持它。如果你控制服务器,你可以改变它。
        猜你喜欢
        • 2020-09-13
        • 2012-03-14
        • 2014-11-13
        • 1970-01-01
        • 2010-09-30
        • 2016-08-27
        • 1970-01-01
        • 2015-09-06
        • 1970-01-01
        相关资源
        最近更新 更多