【问题标题】:$.getJSON isn't working$.getJSON 不工作
【发布时间】:2016-07-14 18:53:13
【问题描述】:

我整天都被困在这个问题上,getJSON 无法正常工作,我尝试了很多示例,但仍然无法正常工作......任何帮助都会很棒。谢谢!

    console.log("hi");
    $.getJSON("https://pod.cscf.me/conversations/new.json", function(result)
    {
            console.log("workingggggg");
            $.each(result, function(i, person)
            {
                    console.log("itworks2");
            }); 
    }); 

它只输出第一个控制台日志“hi”。

这是来自 new.JSON 文件的代码:

    <script>
      //<![CDATA[
        $(document).ready(function () {
          var data = $.parseJSON( "[{\"value\":\"32\",\"name\":\"R M\"},{\"value\":\"17\",\"name\":\"nirkbirk@pod.cscf.me\"},{\"value\":\"15\",\"name\":\"Henry Hoggard\"},{\"value\":\"26\",\"name\":\"testproto@pod.cscf.me\"}]" ),
              autocompleteInput = $("#contact_autocomplete");

          autocompleteInput.autoSuggest(data, {
            selectedItemProp: "name",
            searchObjProps: "name",
            asHtmlID: "contact_ids",
            retrieveLimit: 10,
            minChars: 1,
            keyDelay: 0,
            startText: '',
            emptyText: 'No Results Found',
            preFill: [{name : "",
                       value : ""}]
            });
          autocompleteInput.focus();
        });
      //]]>
    </script>

我想访问 var data = $.parseJSON etc 部分(包含名称和 ID)

【问题讨论】:

  • 您是否还在您的页面上使用任何其他 javascript,这可能是导致 javascript 冲突的原因尝试:jQuery.getJSON
  • 如果您查看网络选项卡,是否存在连接问题?是找到服务器还是服务器拒绝连接?您的服务器是否返回有效响应?如果没有,您将无法访问 getJSON 中的回调。您也可以使用 .ajax 并设置错误处理程序。
  • 由于证书不受信任,您指向 JSON 提要的链接在 Chrome 中似乎不起作用
  • 您在通话之前是否登录了该网络服务?当我在浏览器中打开链接时,我看到它无法正常工作的 2 个可能原因:1. SSL 证书错误,在我继续之后 2. 响应为 {"error":"You need to sign in or sign在继续之前启动。"}.
  • @Mohit,是的,它不受信任,但它是我自己的服务器,我在登录前接受了它。

标签: javascript json getjson


【解决方案1】:

打开 https://pod.cscf.me/conversations/new.json 会给我未经授权的响应 401。

那是在确认我要安装证书之后。有一个json响应说我需要登录但是401响应状态头导致请求失败。

另一件事是,除非站点 (pod. cscf.me) 发送一个 cors 标头。

我正在为 firefox 使用 forcecors 插件,因此可以使用该插件向其他网站发出请求。

有关跨站点脚本和同源策略的更多信息可以在维基百科上找到,它解释了如何使用 JSONP(与 JSON 不同)和 CORS。

使用您提供的测试帐户登录并在控制台中运行代码后,我明白您的意思,没有错误,但从未调用回调。打开https://pod.cscf.me/conversations/new.json可以看到url没有返回JSON,响应为:

<script>
  //<![CDATA[
    $(document).ready(function () {
      var data = $.parseJSON( "[]" )

这不是 JSON,因此永远不会调用回调,因为将响应转换为 javascript 对象会静默失败。

【讨论】:

  • 我们有另一个工作的 JSON 文件,它从散居地获取联系人
  • 我已经更新了我的答案,看起来你代码中的 url 没有返回 JSON
  • 哦,所以如果我们无法将它作为 JSON 获取,我们可以使用 REGEX 来获取数组吗?
  • 您应该生成 JSON 或更改响应头 Content-Type application/json;到内容类型文本/javascript;。我认为第一个选项会更容易,但如果您在响应中提供文本/javascript,您可能能够使用正则表达式获取数组,但您必须手动解析它。
  • 不客气。要将结果作为文本获取,您必须将响应标头内容类型更改为 text/javascript,然后在您的页面中使用以下脚本 $.get(url,null,function(result){console.log(result)跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 2012-01-04
  • 2017-06-08
  • 1970-01-01
相关资源
最近更新 更多