Cake 1.3 中有任何好的/简单的 Ajax 示例而不使用已弃用的助手?

Posted

技术标签:

【中文标题】Cake 1.3 中有任何好的/简单的 Ajax 示例而不使用已弃用的助手?【英文标题】:ANY good/simple examples of Ajax in Cake 1.3 without using deprecated helpers? 【发布时间】:2011-08-21 05:04:48 【问题描述】:

我在 php 中使用了很多 AJAX,但现在我正在尝试学习 CakePHP,但还没有任何好的/简单的例子来说明如何在 CakePHP 1.3 中使用 AJAX。我能找到的唯一示例是用于分页(不是我需要的),或者在强制您包含 scriptaculous 或原型时使用已弃用的帮助器。

是否有任何关于如何使用带有 CakePHP 1.3 的 AJAX 的好/简单示例?或者有人可以在这里解释吗?

我要做的就是让用户单击一个链接,该链接检索一个 php 文件的内容,并将其插入到一个 div 中。 php 文件的内容将根据通过 ajax 调用发送的一些 POST 或 GET 变量进行更改。看起来很简单:(

【问题讨论】:

【参考方案1】:

这是我在 CakePHP 1.3.x 中使用的模式。流程一般是:

    创建替代的面向 json 的布局和视图文件 检测传入请求是否为 AJAX 显式呈现替代 json 布局/视图而不是 text/html

确保在您的应用控制器中包含 RequestHandler 组件和 JsHelper。

在给定的控制器中:

function test() 
    if($this->RequestHandler->isAjax()) 
        $this->set('data', $this->data);
        // Explicit call to render an ajax response, using a layout and view made specifically for ajax
        $this->layout = 'json';
        $this->render('ajax_test');    
    
    // else render views/controllername/test.ctp like normal

你的 app/views/layouts/json.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);

    echo $content_for_layout;
?>

您的 app/views/controllername/ajax_test.ctp 文件应仅包含:

<?php echo $js->object($data); ?>

现在,在您实际将进行 ajax 调用的页面上,它可能看起来像这样,带有 jQ​​uery 代码:

<div id='status'></div>
<?php echo $form->create('Test', array('id'=>'testForm')),
           $form->input('message'),
           $form->end();
?>
<script type='text/javascript'>
    $('#testForm').submit(function(event) 
    event.preventDefault(); // interrupt form submission
    $.ajax(
        type: "POST",
        url: "/controllername/test",
        data: $('#testForm').serialize(),
        success: function(data, textStatus, xmlHttpRequest)                
            $("#status").html(data.Test.message);
        ,
        error: function(jqXHR, textStatus, errorThrown) 
            alert("There was a problem processing the request: " + jqXHR);
        
    );
);
</script>

【讨论】:

这就是你所说的简单吧? :) 我从未使用过 JSON——只是希望有一个简单的 AJAX 示例——即使它可能不是最理想的。在这个例子中——如果我创建了一个包含我想要拉入的动态内容的文件——我将如何显示它?我不想更改整个布局 - 我只想将内容添加到页面上已经存在的 div 中。 上面的代码返回 json,它可以被给定页面上的调用 javascript 解析。 json 是 ajax 的常见传输格式,替代方案是原始 html(不推荐)和 xml。从您的回复看来,您总体上缺乏对 ajax 的基本了解。在尝试将 ajax 集成到 Cake 应用程序之前,您最好先阅读一些基本的 ajax 教程并更好地理解。 好的 - 所以忽略 JSON 与 HTML 的关系(我可以尽快查看 JSON) - 你的示例需要我重写我的整个布局视图文件是/否?如果我解析 JSON 数据 - 我将如何将其添加到我的 div 中?再一次——也许我没有以最好的方式使用 AJAX——但它不应该从能够在普通 PHP 中执行 2 行 jquery 调用到在 Cake 中重写整个页面。也许我猜错了 - 但是 - jsut 并不认为 cake 会使执行通常简单的 AJAX 调用变得更加困难。 您将我上面提供的内容与整个页面的呈现混淆了。这不会影响您现有的视图和布局。上面的代码在only 对 Cake 应用程序进行 ajax 调用时使用,因为在这种情况下您不希望呈现整个页面并返回它。你想发回一些 JS 可以轻松处理的东西。我将使用您页面上的 javascript 的外观更新上面​​的示例。 非常好的泰勒。只是想添加/确认您应该使用相对链接。 url: "/controllername/test" 可能用 Helper::url(array('controller' =&gt; 'controllername', 'action' =&gt; 'test')); 生成?对不起,如果我错了,我是 CakePHP 的新手。泰勒你的回答很有帮助。 +1。【参考方案2】:

您可以查看http://wakeusup.com/2011/06/kkajaxify-plugin-cakephp/ 以获得出色的 ajax 插件

【讨论】:

【参考方案3】:

我通常在所需视图$this-&gt;Html-&gt;script('file', false); 中包含一个js 文件。然后,在该文件中,我执行所有必要的 AJAX 操作(构建要发送的数据,将其发送到另一个页面,将数据带回并最终将其显示在所需的 div 中)。

但请注意,数据发送到的文件需要相对于应用的根目录。这是我让它工作的唯一方法($.get('/users/view/5'); - 在 jQuery 中)

【讨论】:

那么 - 基本上你正常使用 AJAX 而不使用任何特殊的 CakePHP 东西? 不,一点也不。我只使用 Cake 将 JS 文件包含在视图中。这样我就可以像以前一样用 JavaScript 编写代码,这至少对我来说是一个很大的优势,因为我不需要从 Cake 学习任何额外的东西就可以编写一个简单的脚本。

以上是关于Cake 1.3 中有任何好的/简单的 Ajax 示例而不使用已弃用的助手?的主要内容,如果未能解决你的问题,请参考以下文章

从 Cake 1.3 迁移到 2.0 及更高版本 - 迁移现有的,还是仅用于新的?

php [cakephp:API组件和控制器]用于ajax请求和Server-Sent事件的Cake模块。 #cakephp

[Cake] 2. dotnet 全局工具 cake

非常简单的 ajax 添加到购物车

.net持续集成cake篇之常见文件及路径操作

[Cake] 1. CI中的Cake