【发布时间】:2011-07-23 21:14:36
【问题描述】:
我正在尝试在 CakePHP 中使用 Ajax,但并没有真正实现!
我有一个带有一系列按钮的页面 - 单击其中一个按钮应该会在当前页面上显示特定内容。页面不要重新加载很重要,因为它将显示电影,我不希望电影重置。
有几个不同的按钮,每个按钮都有不同的内容;此内容可能非常大,所以我不想在需要之前加载它。
通常我会通过 jQuery 执行此操作,但我无法在 CakePHP 中使用它。
到目前为止我有:
在视图中,按钮控件是这样的:
$this->Html->link($this->Html->image('FilmViewer/notes_link.png', array('alt' => __('LinkNotes', true), 'onclick' => 'showNotebook("filmNotebook");')), array(), array('escape' => false));
在此下方有一个名为“filmNotebook”的 div,我希望在其中显示新内容。
在我的 functions.js 文件中(在 webroot/scripts 中)我有这个功能:
function showNotebook(divId) {
// Find div to load content to
var bookDiv = document.getElementById(divId);
if(!bookDiv) return false;
$.ajax({
url: "ajax/getgrammar",
type: "POST",
success: function(data) {
bookDiv.innerHTML = data;
}
});
return true;
}
为了生成在 div 中显示的纯内容,我在 routes.php 中设置了以下内容:
Router::connect('/ajax/getgrammar', array('controller' => 'films', 'action' => 'getgrammar'));
在films_controller.php中,getgrammar函数为:
function getgrammar() {
$this->layout = 'ajax';
$this->render('ajax');
}
布局文件只有:
当前视图 ajax.ctp 只是:
<div id="grammarBook">
Here's the result
</div>
问题是,当我单击按钮时,我得到了默认布局(所以它就像一个页面出现在我的页面中),其中包含电影索引页面。好像没有在films_controller.php中找到正确的动作
我已完成 CakePHP 手册 (http://book.cakephp.org/view/1594/Using-a-specific-Javascript-engine) 中建议的所有操作。
我做错了什么?我愿意接受有关更好方法的建议,但我也想知道 Ajax 应该如何工作,以供将来参考。
【问题讨论】:
标签: ajax cakephp jquery cakephp-1.3