无法让我的ajax工作。下面是我的代码。我正在尝试使用自动填充
<?php
class PostsController extends AppController {
var $name = 'Posts';
var $helpers = array('Html','Ajax','Javascript');
//Extra Functionality
function autoComplete() {
//Partial strings will come from the autocomplete field as
//$this->data['Post']['subject']
$this->set('topics', $this->Post->Topic->find('all', array(
'conditions' => array(
'Topic.name LIKE' => '%'.$this->data['Topic']['Topic'].'%'
),
'fields' => array('Topic')
)));
$this->layout = 'ajax';
}
}
<div class="posts form">
<?php echo $this->Form->create('Post');?>
<fieldset>
<legend><?php __('Add Post'); ?></legend>
<?php
echo $this->Form->input('comment');
echo $this->Form->input('user_id');
//echo $this->Form->input('Topic',array('type'=>'text'));
echo $ajax->autoComplete('Topic', '/posts/autoComplete');
?>
</fieldset>
<?php echo $this->Form->end(__('Submit', true));?>
</div>
<ul>
<?php foreach($topics as $topic): ?>
<li><?php echo $item['Topic']['name']; ?></li>
<?php endforeach; ?>
</ul>
<!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" dir="ltr" lang="en">
<head>
<title>test page</title>
<?php echo $this->Html->css('skin'); ?>
<?php echo $html->script('prototype');echo $html->script('scriptaculous'); ?>
</head>
<body>
<div id="wrapper">
<div class="header">
Gossip
</div>
<div id="content">
<?php echo $content_for_layout ?>
</div>
<div class="footer">
</div>
</div>
</body>
</html>
我还检查了谷歌浏览器并正确加载了所有脚本文件。是的,我确实添加了所有可疑文件和原型。
谢谢:D
答案 0 :(得分:0)
你确定要推出Cake 1.3吗?你所推出的大部分内容都适用于Cake 1.2,而且我认为应该确保弃用1.3。
请参阅:http://book.cakephp.org/view/1358/AJAX
修复你的助手。在1.3中不推荐使用Javascript和Ajax。此外,您缺少在1.2和1.3中检测ajax响应所需的RequestHandler组件:
var $helpers = array('Html', 'Form', 'Js'=>array("Jquery"));
var $components = array('RequestHandler');
其中Jquery可以是您喜欢的任何库的名称(尽管Jquery默认滚动。)
另外,在你的default.ctp中,你的布局标题中应该有一行<?= $scripts_for_layout ?>
的效果。在布局标记的末尾,就在关闭正文标记之前,<? $this->Js->writeBuffer(); ?>
应该有一行来刷新缓冲的脚本。
注意:如果你滚动1.3,有些人认为$this->Html->script
比$html->script
更好。我倾向于同意。
滚动两个库(scriptaculous和prototype?你确定这是必要的吗?)附带了它自己的一套注意事项和技术,以确保所有包含的lib在兼容模式下运行。为了调试,考虑将jQuery简化为单个lib,如果jQuery不适合你。同样,jQuery默认滚动。如上所示,您需要正确包含Js帮助程序,除非您想要使用其他lib之一覆盖默认选择的lib。此外,某些响应类型要求您为它们创建布局(例如,避免标头发送错误),例如json,某些ajax等,因此RequestHandler可以正确地为它们提供服务。
将所有这些排序并引用Js Helper,Html Helper和Form Helper来设置autoComplete()功能,它应该可以正常工作。或者恢复到1.2并使用Javascript和Ajax到您的内心。 :S
HTH:)