`

CakePHP:ajax方式

    博客分类:
  • PHP
 
阅读更多
直接在ocntroller返回:
public function ajax(){
        $dlist=array("11","22","33");
        return new CakeResponse(array('body' => json_encode($dlist), 'status' => 200));
    }

页面直接接收到josn格式字符串。

方式一:普通的Ajax方式
参考:http://stackoverflow.com/questions/12458235/how-to-send-ajax-response-to-jquery-from-cakephp
Request and Response objects http://book.cakephp.org/2.0/en/controllers/request-response.html
CakePHP2 Request请求对象 http://www.ruiwant.com/cakephp-request-object-tutorial-basic.html
Controller:
<?php
class SitesController extends AppController
{
    public $name = "Sites";

    public function ajaxListAll()
    {
        if ($this->request->is('ajax')) { //这里怎么判断。可能根据情况,但是我使用这样判断是没问题的。
            return new CakeResponse(array('body' => json_encode(array('val' => 'test ok')), 'status' => 200));
        }
    }

}
?>

return new CakeResponse(array('body' => json_encode(array('val' => 'test ok')), 'status' => 200));

javascript:
ajaxTest = function(){
    $.ajax({
        url : '/sites/ajaxListAll',
        data : {
            name : "test",
            shortname : "tst"
        },
        dataType : 'json',
        success : function(html, textStatus) {
            alert('Success ' + textStatus + html);
        },
        error : function(xhr, textStatus, errorThrown) {
            alert('An error occurred! ' + errorThrown);
        }
    });
}











方式二:把ajax得到的内容替换掉dom的某部分
参考:http://www.cnblogs.com/mafeifan/p/3170603.html
CakePHP中的ajax还是比较简单,但要注意一些细节。

app/View/Layouts下新建ajaxtest.ctp
D:\work_documents\htdocs\app\View\Layouts\ajaxtest.ctp
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>CakePHP AJAX Demo :: <?php echo $title_for_layout?></title>
<?php echo $this->Html->charset(); ?>
<?php echo $this->Html->script('jquery-1.7.2.min.js');    ?>
</head>
<body>
<div id="container">
    <center><h2>CakePHP AJAX Demo</h2></center>
    <div id="content"><?php echo $content_for_layout?></div>
    <?php
        $options = array(
            'inline'=>true,
            'cache'=>false,
            'safe' =>false
        );
        echo $this->Js->writeBuffer($options);
    ?>
</div>
</body>
</html>

要注意一定要带上 echo $this->Js->writeBuffer($options); 即输出js。
有关writeBuffer(),自己从官方文档翻译的
php:method:: writeBuffer($options = array())
将所有产生的Javascript写入到代码块中或缓存在文件中,并返回一个带链接的脚本
**选项**

- ``inline`` - (默认为真)若为真,直接在页面内输出缓存内容,若``cache``同样为真,将只产生一个带地址的script标签
- ``cache`` - (默认为假)若为真,将缓存内容保存到一个独立的js文件中,并被页面引用(译者:建议缓存内容过多时使用)
- ``clear`` - (默认为真)若为假,将阻止缓存内容被清除
- ``onDomReady`` - (默认为真)若为真,将缓存内容放到domready事件中(译者:即脚本被自动包含在$(document).ready(function ())中)
- ``safe`` - (默认为真)若为真,页面内的缓存内容被<![CDATA[ ... ]]>语句块包裹

独立出来的js缓存文件在``webroot/js``,要保证该目录可写,并且保证浏览器可以生成任何页面的脚本资源缓存



AjaxtestController.php
D:\work_documents\htdocs\app\Controller\AjaxtestController.php
<?php
class AjaxtestController extends AppController {
    var $layout  = 'ajaxtest';   //指定视图使用的布局为 ajaxtest
    var $helpers = array('Html','Js'); //需要用到的视图辅助类

    function index(){
    }

    function hello(){
        sleep(1);               //本地测试时,为了更好地看到效果,模拟延迟状态
        $this->layout = 'ajax'; //此方法为 AJAX 动作,所以布局需要使用 hello.ctp     
    }
}



Ajaxtest目录并新建index.ctp
D:\work_documents\htdocs\app\View\Ajaxtest\index.ctp
<div id="loading" style="display:none;padding:4px;color:black;
    background-color:#FAD163;width:100px"><strong>Loading...</strong></div>
<div id="view" style="display:none;background-color:#E8EEF7;
    padding:4px;border:1px solid silver;width:300px"></div>
<?php
    //设置 AJAX 选项
    $options = array(
        'update'   => '#view',
        'beforeSend'  => "$('#view').hide();$('#loading').show();",
        'complete' => "$('#loading').hide();$('#view').show();"
    );
    //使用 AjaxHelper 创建 AJAX 动作链接
    echo $this->Js->link('Click here!', '/ajaxtest/hello', $options);
?>
   



再新建一个hello.ctp,ajax加载的内容
D:\work_documents\htdocs\app\View\Ajaxtest\hello.ctp
<center>Hello, AJAX world!</center>



运行http://localhost/ajaxtest/index ,效果是有个超链接文字是'Click here!',但点击链接,内容即hello.ctp通过ajax方法加载进来了。
分享到:
评论

相关推荐

    CakePHP :: Ajax Demo

    This is a simple demo of some of the AJAX helpers now available in CAKE. These helpers are directly modeled on Ruby On Rails. In fact, they were shamelessly ported from rails almost verbatim. You can ...

    CakePHP使用ajax传值

    CakePHP框架中实现Ajax传值是通过AJAX (Asynchronous JavaScript and XML) 技术与后端的CakePHP控制器进行数据交换的一种方式。通常在Web开发中,Ajax用于创建更为动态和响应快速的用户界面。当用户与页面上的元素...

    Ajax-cakephp-ajax.zip

    Ajax-cakephp-ajax.zip,ajax for cakephp:一个易于处理ajax请求的插件。,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不...

    cakephp-ajax:用于CakePHP的AJAX:用于简化处理AJAX请求的插件

    CakePHP Ajax插件 一个CakePHP插件,使使用AJAX变得容易。 该分支适用于CakePHP 4.0+ 。 有关详细信息,请参见。 这个插件是做什么用的? 基本上是DRY(不要重复自己)和简单的AJAX处理。 演示版 有关实时演示,...

    cakephp-ajax-validation:Cakephp ajax 验证插件

    Cakephp Ajax 验证Cakephp ajax 验证插件要求CakePHP &gt;= 2.0 jQuery &gt;= 1.7安装克隆/复制此目录中的文件到app/Plugin/AjaxValidation 通过调用CakePlugin::load('AjaxValidation');确保插件已加载到app/Config/...

    Pukis:ajax用户管理仪表盘

    普基斯Ajax 用户管理仪表板演示: : 用户名:superdemo、admindemo、userdemo 密码:demo123 这个项目选择 CakePHP 是因为它提供了一个框架的主要原因,可以帮助我们更快地启动项目。 另一方面,使用 ajax 将加快您...

    cakephp-2.4.1

    9. **Ajax支持**:CakePHP 2.4.1版本支持Ajax交互,开发者可以通过AjaxHelper创建异步请求,提升用户体验。 10. **性能优化**:CakePHP提供缓存机制,包括查询缓存、视图缓存和页面碎片缓存,有效提高应用程序的...

    CakePHP 1.2 API 中文文档

    通过内置的JS助手和Controller组件,CakePHP 支持AJAX无刷新交互,使Web应用更加动态和响应式。 **国际化(I18n)与本地化(L10n)** CakePHP 1.2 提供了完善的i18n和l10n支持,允许开发者轻松创建多语言应用。 *...

    Ajax-Paginacion-Ajax-CakePHP3.zip

    Ajax-Paginacion-Ajax-CakePHP3.zip,实现paginación en ajax usando cakephp3,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分...

    cakephp最新开发文档

    12. **AJAX支持**:框架内建支持AJAX,允许创建响应式的用户体验。 13. **视图缓存**:通过视图缓存,可以提高性能,减少不必要的数据库查询。 14. **命名约定**:CakePHP遵循一套严格的命名规则,如CamelCase...

    cakephp-cakephp

    此外,它还支持AJAX集成,可以轻松创建动态交互的用户体验。不仅如此,CakePHP 还提供了一套完整的权限控制机制(Acl),帮助开发者轻松实现用户角色和权限管理,这对于大型网站或应用的运营至关重要。 总的来说,...

    CakePHP插件-将Ajax聊天添加到您的应用程序_PHP_下载.zip

    这个名为"CakePHP插件-将Ajax聊天添加到您的应用程序"的资源是为开发者提供了一种集成实时聊天功能的方式,使他们能够在自己的CakePHP应用中轻松实现用户间的交互。 Ajax(Asynchronous JavaScript and XML)是一种...

    CakePHP php框架 v3.7.0 beta1.zip

    视图支持Ajax 内置校验框架 提供应用程序的基础模块和CRUD 代码自动生成功能 提供处理session,request,security的组件 灵活的视图缓存功能 面向对象 无需配置:只要安装好数据库 兼容PHP4和PHP5。 CakePHP ...

    CakePHP php框架 v3.8.5

    主要特性:基于MVC架构视图支持Ajax内置校验框架提供应用程序的基础模块和CRUD 代码自动生成功能提供处理session,request,security的组件灵活的视图缓存功能面向对象无需配置:只要安装好数据库兼容PHP4和PHP5。

    CakePHP php框架 v3.7.8.zip

    视图支持Ajax 内置校验框架 提供应用程序的基础模块和CRUD 代码自动生成功能 提供处理session,request,security的组件 灵活的视图缓存功能 面向对象 无需配置:只要安装好数据库 兼容PHP4和PHP5。 CakePHP ...

    cakephp--使用_CakePHP_的_Session_和_Request_Handler_组件

    CakePHP提供了三种不同的会话存储方式:文件、数据库和Cookie,每种方式都有其独特的优点。 - **文件存储**是最常见的会话存储方式,数据被保存在服务器上的临时文件中。这种方式简单且易于配置,但可能在高负载...

    CakePHP框架最全中文文档.

    例如,AjaxHelper可以使得在视图中请求Ajax操作变得简单。 3. 回调函数:CakePHP控制器和模型都包含了一些预定义的回调函数,这些回调函数允许开发者在特定的执行点插入自定义逻辑。 - 控制器的回调函数包括...

    cakephp-cakephp-1.3.12-32-gb4e3c8a.zip_cakephp 1.3_cakephp1.3_ca

    - **AJAX支持**:通过AjaxHelper,开发者可以轻松实现异步交互,增强用户体验。 - **国际化和本地化**:内置的I18n(国际化)和L10n(本地化)支持,方便应用的多语言开发。 通过对CakePHP 1.3版本的学习和实践,...

    cakephp1.2

    此外,CakePHP 1.2 还支持AJAX集成,通过JavaScript和jQuery库,可以实现页面的无刷新更新,提升用户体验。它的模板引擎(View Helper)允许开发者创建可复用的视图元素,使界面设计更灵活。 总结起来,CakePHP 1.2...

Global site tag (gtag.js) - Google Analytics