百度空间 | 百度首页 
 
查看文章
 
Cakephp应用Jquery&JSON(JSONP)跨域调用实例
2008-04-17 上午 09:48
Json的好处就不累赘了,有说好的,也有说不好的。但是,json的size比xml小大约50%基本都是大家认可的。

从Jquery 1.2开始,增加了JSONP的支持,简单来说,就是提供一种方法可以进行跨域的引用JSON。

首先,应用JSONP需要Client端发起一个JSON的请求。

$.getJSON("http://www.example.com/cates/getXML.json?callback=?",             //调用JSONP
function(data){
                       $.each(data.items, function(i,item){
                        $("<img/>").attr("src", "http://www.example.com/"+item.Post.post_pic_path+item.Post.post_pic_name).appendTo("#home");
                    });
                });

从Cakephp 1.2开始,对于JSON的支持更加有好。
1. 在Config/router.php文件内增加,这种做的目的就是可以相应.json的请求
  
    Router::parseExtensions('rss', 'json', 'xml');

2. 在你要应用的Controller内增加一下两个

var $helpers = array('Javascript');       //用来将PHP Array转化为Object
    var $components = array('RequestHandler'); //用来支持输出定义化的格式

3. 在你要使用的Function中
      
   function getJSON()
   {
           $this->RequestHandler->setContent('json', 'text/x-json');
           $new1 = $this->getMainNews(1,41,3);
           $this->set('aPosts', $new1);          
           if(isset($this->params['url']['callback']))
           {
               $callback = $this->params['url']['callback'];
               $this->set('callback', $callback);
           }
}

4. 增加View层的支持

   4.1 增加 layouts/
                            json/
                                default.ctp
         <?php
             header("Pragma: no-cache");
             header("Cache-Control: no-store, no-cache, max-age=0, must-revalidate");
             header('Content-Type: text/x-json');
             header("X-JSON: ".$content_for_layout);
        ?>
        <?php       
                echo $content_for_layout;
        ?>

    4.2 增加     views/
                                json/
                                       get_j_s_o_n.ctp
                                cates/
                                        get_j_s_o_n.ctp        

          <?php echo $callback?>({                            //返回请求JSONP的参数用来匹配
                "title": "",
                "link": "/",
                "description": "",
                "modified": "",
                "generator": "",
                "items":
        <?php
                echo $javascript->object($aPosts);    // 将PHP Array转化为Object
            ?>
            })
      
5. 这样,我们就可以访问/controller/getJSON得到普通的HTML页面,而访问/controller/getJSON.json得到所需要的JSON结果了

类别:教程 | 浏览() | 评论 (2)
 
最近读者:
 
网友评论:
1
2008-05-29 下午 12:58 | 回复
如果这样使用的话,你就好像没有用到jQuery的json功能啊,而是用cakephp直接请求json文件了啊!!
 
2
2008-05-30 下午 04:18 | 回复
不是很明白你的意思 你说的jQurey的json功能是指的什么呢?
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu