【问题标题】:Is this valid JSON markup?这是有效的 JSON 标记吗?
【发布时间】:2011-03-08 16:14:43
【问题描述】:

我正在尝试从俄罗斯航运网站获取一些信息。作为 JSON/Jquery/Internets 的 n00b,我无法将数据转换为 json 格式。

按照公司的 API,我转到 URL: http://emspost.ru/api/rest/?callback=json&method=ems.calculate&from=city--abakan&to=city--anadyr&weight=1

这会返回:

json({
  "rsp": {
    "stat": "ok",
    "price": "750",
    "term": {
      "min": 5,
      "max": 9
    }
  }
})

按照 Jquery 的文档,我尝试过:

<script>
$.getJSON("http://emspost.ru/api/rest/?callback=json&method=ems.calculate&from=city--abakan&to=city--anadyr&weight=1",
  function(data) {
    alert(data);
  });
</script>

这将返回空值。知道我做错了什么吗?

【问题讨论】:

标签: javascript jquery json api


【解决方案1】:

您正在使用一个回调函数 (callback=json),它在加载时运行函数 json

尝试获取这个:

http://emspost.ru/api/rest/?method=ems.calculate&from=city--abakan&to=city--anadyr&weight=1

顺便说一句,您的请求是跨域的吗?如果是这样,则不建议使用 xhr。

【讨论】:

    【解决方案2】:

    改用callback=?,如下所示:

    $.getJSON("http://emspost.ru/api/rest/?callback=?&method=ems.calculate&from=city--abakan&to=city--anadyr&weight=1",
    function(data){
      alert(data);
    });
    

    然后您将在警报中获取您的对象:) JSONP 通过在查询字符串中获取该回调并调用该函数来工作(该函数不存在,除非您在它返回时创建了 function json() {}。当您执行 @ 987654326@ jquery 动态命名你给 $.getJSON()success 函数并替换它,像这样:?callback=FunctioNameGiven,所以它实际上会正确运行。

    如果你想想它是如何运行的,它基本上是:

    <script type="text/javascript">
      //returned javascript here, e.g. FunctioNameGiven({ object data });
    </script>
    

    这样做是为了它是一个 GET 请求,并且不受同源策略规则的限制,这就是 JSONP 在普通 JSON 请求被阻止的情况下的工作方式:)

    【讨论】:

    • 我想添加“?” mark 是触发 jQuery 中的 JSONP 支持所必需的...如果省略,jQuery 将不知道它是 JSONP 并会尝试获取数据,就像它是普通的 JSON 请求一样,这将不起作用。
    • @chakrit - 好点,不过我要补充一点,$.getJSON() 是这样,但不是 jQuery 整体(尽管它是最简单的方法),例如:jsfiddle.net/jF6yj跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多