【问题标题】:cakephp 1.3 ajax autocomplete not working. autocomplete=offcakephp 1.3 ajax 自动完成功能不起作用。自动完成=关闭
【发布时间】:2011-10-08 14:50:18
【问题描述】:

根本无法让我的 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

【问题讨论】:

    标签: php cakephp cakephp-1.3


    【解决方案1】:

    您确定要滚动 Cake 1.3 吗?您滚动的大部分内容适用于 Cake 1.2,但在 1.3 中已弃用,我觉得我应该确定一下。

    见:http://book.cakephp.org/view/1358/AJAX

    修复你的助手。 Javascript 和 Ajax 在 1.3 中已弃用。此外,您还缺少检测 1.2 和 1.3 中的 ajax 响应所需的 RequestHandler 组件:

    var $helpers = array('Html', 'Form', 'Js'=>array("Jquery"));
    var $components = array('RequestHandler');
    

    其中 Jquery 可以是您喜欢的任何库的名称(尽管默认情况下 Jquery 滚动。)

    此外,在您的 default.ctp 中,您的布局标题中应该有一行表示&lt;?= $scripts_for_layout ?&gt; 的效果。在布局标记的末尾,就在结束正文标记之前,应该有一行&lt;? $this-&gt;Js-&gt;writeBuffer(); ?&gt; 的效果,以刷新缓冲的脚本。

    注意:如果你正在滚动 1.3,有些人觉得 $this-&gt;Html-&gt;script$html-&gt;script 更好的做法。我倾向于同意。

    滚动两个库(scriptaculous 和原型?您确定这是必要的吗?)带有它自己的一套注意事项和技术,以确保所有包含的库都在兼容模式下运行。为了调试,如果 jQuery 不适合您,请考虑至少将其简化为单个库。同样,jQuery 默认滚动。如果您想用其他库之一覆盖默认值,您需要正确包含 Js 帮助程序,如上所示,除了您选择的库。此外,某些响应类型需要您为它们创建布局(例如,以避免标头发送错误),例如 json、一些 ajax 等,以便 RequestHandler 可以正确地为它们提供服务。

    整理所有这些并参考 Js Helper、Html Helper 和 Form Helper 来设置您的 autoComplete() 功能,它应该可以正常工作。或者恢复到 1.2 并使用 Javascript 和 Ajax 来满足您的需求。 :S

    HTH :)

    【讨论】:

    • 老实说,我没有看到位于顶部的迁移指南。我认为他们这样做而不是仅仅替换内容有点令人困惑。无论如何,感谢您的回复。
    猜你喜欢
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 2017-02-28
    • 2020-11-14
    • 2014-03-11
    相关资源
    最近更新 更多