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 调用的页面上,它可能看起来像这样,带有 jQuery 代码:
<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' => 'controllername', 'action' => 'test'));
生成?对不起,如果我错了,我是 CakePHP 的新手。泰勒你的回答很有帮助。 +1。【参考方案2】:
您可以查看http://wakeusup.com/2011/06/kkajaxify-plugin-cakephp/ 以获得出色的 ajax 插件
【讨论】:
【参考方案3】:我通常在所需视图$this->Html->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