Cakephp1.2中JQuery和JSON的使用

文章原文来自于 Eelco Wiersma 的文章 《Using JSON in CakePHP 1.2》

参考文章

Using JSON in CakePHP 1.2

介绍 JSON

JQuery API 1.3

简介

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。Cakephp1.2提供了对JSON的内置支持,主要体现在两个特殊的方法:

Router::parseExtensions() JavascriptHelper::object()

目标

我们要通过JQuery的$.getJSON方法,获取Cakephp服务端的JSON数据,URL可能是这个样子

如何完成?

 

首先,要让Cakephp启用JSON的扩展名解析

编辑/config/routes.php,添加

1. Router::parseExtensions(’json’);

然后,为JSON设置Content-type

编辑app_controller.php,添加

1. var $components = array ( 'RequestHandler' );
2. function beforeFilter() {
3.      $this ->RequestHandler->setContent( 'json' , 'text/x-json' );
4.      parent::beforeFilter();
5. }

RequestHandler的setContent方法,可以使json的扩展名使用特定的layout和视图,就像下面的代码

下面,为你的JSON数据创建一个layout

创建/layouts/json/default.ctp的代码

1. <?php
2. header( "Pragma: no-cache" );
3. header( "Cache-Control: no-store, no-cache, max-age=0, must-revalidate" );
4. header( 'Content-Type: text/x-json' );
5. header( "X-JSON: " . $content_for_layout );
6.  
7. echo $content_for_layout ;
8. ?>

注意:

在使用RequestHandler的setContent方法后,Cakephp会自动解析json扩展名的访问并且会默认使用

/layouts/json/default.ctp解析json,如果不存在这个layout的话,会出现 未找到layout错误 .

x-json头可以被prototype.js将返回的数据自动解析为JSON对象

下面创建我们的JSON视图

创建/views/posts/json /index.ctp的代码 (注意加粗的部分 )

1. < ?php
2. echo $javascript ->object( $aPosts );
3. ?>

同样的json也有自己的视图文件,简单理解就是,在你的控制器视图下的json文件夹,建立同名的视图文件.

控制器中的代码

1. function index() {
2.      $this ->set( 'aPosts' , $this ->Post->findAll());
3. }

在JQuery中使用

假如我们的返回值类似下面这样

01. Array
02. (
03.      [0] => Array
04.          (
05.              [Post] => Array
06.                  (
07.                      [id] => 1
08.                      [user_id] => 54
09.                      [subject] => augue scelerisque mollis.
10.                      [body] => tristique senectus et netus et malesuada fames ac turpis egestas. Fusce aliquet magna
11.                      [created] => 2009-10-29 21:15:51
12.                  )
13.  
14.          )
15.  
16.      [1] => Array
17.          (
18.              [Post] => Array
19.                  (
20.                      [id] => 2
21.                      [user_id] => 81
22.                      [subject] => purus, in molestie tortor nibh
23.                      [body] => elit. Nulla facilisi. Sed neque. Sed eget lacus. Mauris non dui nec urna suscipit nonummy.
24.                      [created] => 2009-08-01 06:57:03
25.                  )
26.  
27.          )
28.  
29. )

我们可以这样使用JSON数据

1. $.getJSON("http://localhost/posts/index.json ", function(json){
2.    alert(json[0].Post.subject);
3.    alert(json[1].Post.subject);
4. });

可以看到,我们可以直接使用由json返回的数据,而不用做任何转换.

总结

同样的解析方法也适用于xml和rss扩展,cakephp对xml和rss提供了默认支持,有兴趣的话可以研究一下.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值