2

我必须编写一个脚本,该脚本将托管在不同的域上。该脚本必须从我的服务器获取信息。

所以,stackoverflow 的用户告诉我,我必须使用JSON-P 格式,经过研究,这就是我要做的。(JSON-P 中提供的数据用于在其他网站上显示托管在我的服务器上的一些信息)

  1. 如何从我的服务器输出 JSON-P?json_encode是否与from 的功能相同PHP

  2. 我如何为输出 JSON-P 设计树模式(你知道,比如:({“name”:“foo”,“id”:“xxxxx”,“blog”:“ http://xxxxxx.com ” }); 我可以从我的 XML 输出中窃取这个吗?(http://bit.ly/9kzBDP

  3. 每次访问者浏览我的小部件所在的网站时,它都会在我的服务器上发出请求,请求 JSON-P 数据显示在客户端。 它会显着增加 CPU 负载(网站上的 1 个访问者将在我的服务器上拥有脚本 = 1 个 SQL 请求以输出数据),所以有什么方法可以“缓存”JSON-P 信息输出以仅刷新它每天一到两次并将其存储到“文件”中(在哪个扩展名中?)。

但另一方面,我会说直接请求 JSON-P 数据(不缓存它)是一个优点,因为将集成脚本的网站只想显示他们的信息而不是整个数据。所以,用这样的东西制作一个脚本:

jQuery.getJSON("http://www.something.com/json-p/outpout?filter=5&callback=?", function(data) {
................);
});

其中filter = 网站想要显示的信息。

  • 额外的问题:我必须使用 JS 框架来阅读 JSON-P 吗?或者没有任何框架的JS纯页面可以做到这一点?

你怎么看 ?

非常感谢你 ;)

4

2 回答 2

2

JSONP 请求

$.ajax({
  type: "get",
  dataType: "jsonp",
  url: "mothership.com/widget_data",
  data: {whatever: "here", requested_from: "someonesblog.com" },
  cache: true,
  success: function(data, textStatus, XMLHttpRequest){
    // respond to ajax call here

    // debug: make sure your data is getting loaded properly
    console.log(data);

    // do other necessary things here
  }
});

从服务器编码和输出 JSON

<?php
  header("Content-Type: application/json");

  # You can access data from the jQuery.ajax() call with $_GET here

  $data = array(
    "name" => "foo",
    "id"   => 1234,
    "blog" => $_GET["requested_from"]
  );
  echo $_GET["callback"] . "(" . json_encode($data). ");" ;

  # this will output something like
  # jsonp1255285823({"name":"foo","id":1234,"blog":"someonesblog.com"});

  exit;
?>
于 2010-04-18T18:34:35.867 回答
2

您可以使用该json_encode函数获取对象的 JSON 字符串表示,然后在其周围添加填充,即:

$json = json_encode($myObj);
echo $callback . "(" . $json . ");";

大多数 JSON 结构紧密复制 XML 结构和命名约定。没有后代的单个节点成为属性,重复的 XML 节点将是 JSON 数组,而具有后代的节点是对象。请参阅http://www.ajaxprojects.com/ajax/tutorialdetails.php?itemid=396以获得以两种格式表示的数据的并排视图。

至于在服务器上缓存数据,如果您的流量不太大,大多数缓存方法都可能有点矫枉过正。如果您仍然坚持需要它,请参阅我自己的问题之一的答案和推荐memcached的答案。您可以使用客户端缓存控制标头来expires确保客户端即使跨多个页面/刷新也只获取一次数据。

奖励答案:JSON-P 的美妙之处在于您不需要任何库来解析它。格式是纯 javascript,向页面添加 JSON-P 就像向页面添加脚本一样简单:

<script 
   type="text/javascript" 
   src="http://myurl.com/jsonp.php?callback=test&filter=5">
</script>
于 2010-04-18T18:38:17.163 回答