我必须编写一个将在不同域上托管的脚本。该脚本必须从我的服务器获取信息。
所以,stackoverflow的用户告诉我,我必须使用 JSON-P格式,经过研究,我将要做的事情。 (JSON-P中提供的数据用于显示我的服务器托管在其他网站上的一些信息)
如何从服务器输出JSON-P ?是否与json_encode
PHP
函数相同
如何为输出JSON-P设计树模式 (你知道,如:({“name”:“foo”,“id”:“xxxxx”,“blog”:“http://xxxxxx.com”}); 我可以从我的XML输出中窃取它吗? (http://bit.ly/9kzBDP)
每次访问者浏览我的小部件所在的网站时,它都会在我的服务器上发出请求,请求在客户端显示JSON-P数据。 会大幅增加CPU负载(网站上有1个访问者,我的服务器上有脚本= 1 SQL请求输出数据),所以有没有办法'缓存' JSON-P信息输出每天仅刷新一次或两次并将其存储到'文件'(扩展名?)中。
但另一方面我会说直接请求JSON-P数据(不缓存它)是一个优点,因为,将集成脚本的网站只想显示他们的信息而不是整个数据。所以,制作一个类似的脚本:
jQuery.getJSON("http://www.something.com/json-p/outpout?filter=5&callback=?", function(data) {
................);
});
过滤器 =网站要显示的信息。
您怎么看?
非常感谢你 ;)
答案 0 :(得分:2)
$.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
}
});
<?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;
?>
答案 1 :(得分:2)
您可以使用json_encode
函数获取对象的JSON字符串表示形式,然后在其周围添加填充,即:
$json = json_encode($myObj);
echo $callback . "(" . $json . ");";
大多数JSON结构都会严格复制XML结构和命名约定。没有后代的单个节点成为属性,重复的XML节点将是JSON数组,具有后代的节点是对象。请参阅http://www.ajaxprojects.com/ajax/tutorialdetails.php?itemid=396,了解以两种格式表示的数据的正确并排视图。
至于在服务器上缓存数据,如果流量不是太大,大多数缓存方法可能有点过分。如果您仍然坚持需要,请参阅this answer我自己的一个问题和this answer recommending memcached。您可以使用客户端缓存控制标头expires
来确保客户端仅在多个页面/刷新时提取数据一次。
奖励回答:JSON-P的美妙之处在于你不需要任何库来解析它。格式是纯javascript,将JSON-P添加到页面就像向页面添加脚本一样简单:
<script
type="text/javascript"
src="http://myurl.com/jsonp.php?callback=test&filter=5">
</script>