cakephp 1.3 ajax autocomplete不工作。自动填充=关

时间:2011-10-08 14:50:18

标签: php cakephp cakephp-1.3

无法让我的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';
        }
}

FORM add.ctp

<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>

应该动态显示的ajax表单

<ul>
<?php foreach($topics as $topic): ?>
 <li><?php echo $item['Topic']['name']; ?></li>
<?php endforeach; ?>
</ul>

和default.ctp

中的js插件
<!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

1 个答案:

答案 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:)