跨域获得新闻信息
公司有两个网站,领导让把另一个网站的新闻显示在主网站上。不想再繁琐连接子网站数据库,为了省工省时,就用jquery做个简单的跨域。
假设主网站为:master.com 子网站为:slave.com
1、先在slave.com做一个新闻列表的json数据接口。在新闻的控制器article中添加的jsonNews方法。
function jsonNews(){ $list = syDB('article')->findAll(array('tid'=>'8','isshow'=>1),'addtime desc','id,title,addtime'); foreach ($list as $k=>$val){ $list[$k]['addtime'] = date("Y-m-d",$val['addtime']); $list[$k]['url'] = "/News/hnNews/id/".$val['id'].".html"; } $json_string = json_encode($list); echo "getProfile($json_string)"; }
2、在master.com中调用接口,并显示列表。
<ul> <div id="newslist"></div> <script type="text/javascript"> function getProfile(str) { var list = ""; $.each(str,function(i,o){ list+= "<li><span>"+o.addtime+"</span><a href="+o.url+" target='_blank' title="+o.title+">"+o.title+"</a></li>"; }) $("#newslist").html(list); } </script> <script type="text/javascript" src="http://slave.com/index.php?c=article&a=jsonNews"></script> </ul>
通过获得子网站json接口的数据,然后在主网站排列出来就完事了。
虽然把新闻排列出来,但是这并不算是完事了,因为新闻还必须的点进去,查看内容。
为了不和原来的视图模板混淆,于是我新建了一个模板文件:hnNews.html。步骤1中,在处理新闻URL时,已经写好了新闻路径,调用NewsAction中的hnNews方法。
3、master.com定义新模板hnNews.html 并获得子网站新闻的id,并将id赋值到模板中。
public function hnNews(){ $id = intval($_GET['id']); $this->assign('id',$id); $this->display(); }
4、在hnNews.html中传递子网站新闻id并跨域获得新闻的标题、内容、发布日期等信息。
<div class="content"> <div class="content_news_sub"> <h4 id="jsontitle"></h4> <div class="time_yuan">发布时间:<span id ="jsontime"></span> 来源:<a href="http://slave.com/article/{$id}1.html" target="_blank" >子网站</a></div> <div class="wen" id="jsonbody"></div> </div> </div> <script type="text/javascript"> function jsonpCallback(result) { $("#jsontitle").html(result.title); $("#jsontime").html(result.addtime); $("#jsonbody").html(result.body); } $(function(){ $("#jsonbody img").each(function(){ var url = $(this).attr("src"); $(this).attr("src",'http://slave.com'+url); }) })//替换新闻内容中的图片路径 </script> <script type="text/javascript" src="http://slave.com/index.php?c=article&a=jsonContent&id={$id}&callback=jsonpCallback"></script>
使用jsonp跨域进行数据交换。
5、在子网站中获得新闻id,查询新闻标题、内容、创建时间、点击量等,返回json数据。在新闻的控制器article中添加的jsonContent方法。
function jsonContent(){ $callback=trim($_GET['callback']); $id = intval($_GET['id']); $sql='select id,title,addtime,body from '.$this->db.' a left join '.$this->db.'_field b on (a.id=b.aid) where a.id ='.$id; $list = $this->Class->findSql($sql); foreach ($list as $k=>$val){ $arr['title'] = $val['title']; $arr['addtime'] = date("Y-m-d",$val['addtime']); $arr['body'] = $val['body']; } $result=json_encode($arr); echo $callback."($result)"; }
点击新闻列表,就能查看到子网站新闻信息了。
我这种做法比较偷懒,适合网站流量小的企业站。

浙公网安备 33010602011771号