【问题标题】:Problem with getJSON responsegetJSON 响应的问题
【发布时间】:2011-09-23 14:12:29
【问题描述】:

我对 Chrome 中的 $.getJSON 响应有一些问题

查询是

$.getJSON("http://www.askgeo.com/api/428014/sf2t36ujv1tsf325t5734gstr4/timezone.json?callback=?&points=55.77184,37.623553",
    function(json){
        <some code>
    }
);

如果你点击这个链接,你会得到一个 json 文本。

当我运行此查询时,Chrome 显示错误:

资源被解释为脚本,但使用 MIME 类型 application/json 传输

SyntaxError: Unexpected token : timezone.json:1

它是否尝试将 json 响应转换为 JavaScript 对象?如果是这样,为什么它不能这样做?有没有办法解决这个问题?

在 Chrome 调试器中,我找到了包含以下内容的文件“timezone.json”:

{"code":0,"message":"ok","data":[{"timeZone":"Europe/Moscow","currentOffsetMs":14400000,"latitude":55.77184,"longitude":37.623553}]}

【问题讨论】:

  • 是否有理由将 URL 括在括号中并在末尾添加 [1]
  • 我以前没有见过像这样的getJSON调用中使用的括号;这是做什么的?
  • url 两边的方括号是干什么用的?
  • @leo dave 和 galchen:我相信这是代码块中的 markdown 语法
  • @Tentonaxe,哦,我现在明白了。这很有趣。

标签: javascript jquery getjson


【解决方案1】:

您从中请求数据的服务器未设置为返回 JSONP。因此,您需要构建某种代理来为您获取数据,或者使用 YQL。

编辑:

如果您要使用 YQL,这是您将使用的 url:

http://query.yahooapis.com/v1/public/yql?q=SELECT%20*%20FROM%20json%20WHERE%20url%3D%22http%3A%2F%2Fwww.askgeo.com%2Fapi%2F428014%2Fsf2t36ujv1tsf325t5734gstr4%2Ftimezone.json%3Fpoints%3D55.77184%2C37.623553%22&format=json&diagnostics=true

有关我如何生成该 url 的信息,请访问:

http://developer.yahoo.com/yql/console/#h=SELECT%20*%20FROM%20json%20WHERE%20url%3D%22http%3A//www.askgeo.com/api/428014/sf2t36ujv1tsf325t5734gstr4/timezone.json%3Fpoints%3D55.77184%2C37.623553%22

你可以在底部找到网址。

使用 YQL:http://jsfiddle.net/JGwU3/1/

然而,使用 YQL 有一个怪癖。如果结果只包含一个结果,它的内容是一个对象,但是,如果它是多个,它的内容将是一个数组。您可以通过 console.logging 响应来查看差异。

【讨论】:

    【解决方案2】:

    API documentation 中说,您应该在单独的 JSON 对象中提供查询参数作为第二个参数。

    $.getJSON('http://www.askgeo.com/api/428014/sf2t36ujv1tsf325t5734gstr4/timezone.json', {'callback':'', 'points': '55.77184,37.623553'}, function(json) {
      alert(json.data[0].timeZone);
    });
    

    在我测试时工作正常。

    (这里完全忽略了 JSONP)

    【讨论】:

    • 这不是被同源问题抓住了吗?
    • 是的,当然,在我的开发机器上将其关闭,并没有考虑它。很抱歉把它弄混了,自从我写完这篇文章后就没有意识到 ?callback 就在那里
    【解决方案3】:

    编辑

    好的,我的帖子错了,这是一个 JSONP 问题。请参阅此 jQuery 文档页面,了解如何从 URL 中检索数据: http://api.jquery.com/jQuery.ajax/

    【讨论】:

    • 括号来自stackoverflow上使用的markdown编辑器。应该是笔误
    • 嗯,我不这么认为——我认为这是 JSONP 问题。
    猜你喜欢
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    相关资源
    最近更新 更多