非常简单的JSON-P示例问题

时间:2012-11-22 02:01:06

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

我正在尝试构建一个移动应用程序,它将获取将从mysql数据库的php查询输出的json数据。这是我第一次这样做,所以只是尝试一个简单的例子让事情发挥作用。在同一个域上,一切似乎都很好,但是我遇到了让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并将其称为一天?

全部谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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

      <callback-function> ( <JSON-payload> )
    
  3. 例如,回调({name:“JONES”,职位:“官员”})

    如果服务刚刚返回,则客户端无提示失败。

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