【问题标题】:Issues with Very Simple JSON-P Example非常简单的 JSON-P 示例的问题
【发布时间】:2012-11-10 09:22:37
【问题描述】:

我正在尝试构建一个移动应用程序,它将获取 json 数据,这些数据将从 mysql 数据库的 php 查询中输出。这是我第一次这样做,所以只是尝试一个简单的例子来让事情发挥作用。在同一个域上一切似乎都很好,但是我在让 json-p 用于跨域提取时遇到问题。相同的域代码是:

<html>
<head>
<title>the title</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" language="javascript">
$(document).ready(function() {
  $.getJSON('example.json', function(staff) {
         document.write(staff.name);
      });
});

</script>

</head>
<body>
</body>
</html>

效果很好,但是当我将 example.json 移动到另一个域并进行测试时,它不再起作用。我添加了 ?callback=?正如我在各种教程中所读到的那样,到 url 的末尾,但它没有加载任何内容。将一行更改为:

$.getJSON('http://www.knoxyouthgroup.org/example.json?callback=?', function(staff) {

不知道从这里去哪里,有点碰壁。很抱歉这个新手问题,但任何帮助将不胜感激!

我们的最终目标是使用我们托管的 json 数据构建一个移动应用程序。数据将非常简单且最少,您可以自己托管吗?我一直在阅读有关 REST 服务等的信息,但不确定这是否只是我可以编写一个 php 脚本并将其转储到 json 并称之为一天的东西?

谢谢大家!

【问题讨论】:

  • 您是否尝试过使用 firebug 并检查请求和响应标头?
  • 如果您在修改 getJSON()-line 后尝试使用本地 json 文件执行该示例,该示例是否仍然有效?
  • 感谢 cmets 伙计们。我添加了 ?callback=?到本地示例,它也停止工作。这是否意味着回调没有正确完成?
  • 好主意@papirtiger。当我这样做时,GET 上的状态显示 301 Moved Permanently。你知道这意味着什么,或者如何解决吗?
  • 这真的很难......任何帮助都会很棒!该脚本在本地调用时工作得很好,甚至在调用 Twitter 时也可以工作,但是对我自己的 json 的任何调用,跨域都不起作用。我错过了什么?

标签: javascript json jquery-mobile cross-domain jsonp


【解决方案1】:

JSONP 的工作方式与普通 JSON 不同,客户端和服务都必须遵守规则才能工作:

  1. 客户端 使用 JQuery.getJSON,指定“callback=?”通知 JQuery 您正在执行 JSONP 调用。见http://api.jquery.com/jQuery.getJSON/

  2. 服务 服务必须通过使用回调函数包装响应 JSON 来正确处理 JSONP 调用。它应该以以下格式返回响应:

      <callback-function> ( <JSON-payload> )
    

例如,回调({name:"JONES",position:"Officer"})

如果服务只是返回,客户端会静默失败。

我怀疑您的服务不符合 JSONP,请将其重写以同时处理本地 (JSON) 和远程 (JSONP) 调用。

【讨论】:

    猜你喜欢
    • 2011-08-25
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 2011-04-13
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多