CakePHP 1,3 AJAX автозаполнение не работает. автозаполнения = выкл - PullRequest
0 голосов
/ 08 октября 2011

Не могу заставить мой 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';
        }
}

ФОРМА 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>

и аддон js в default.ctp

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

Я также проверил Google Chrome, и все файлы скриптов загружены правильно. И да, я добавил все скриптовые файлы и прототип.

СПАСИБО: D

1 Ответ

0 голосов
/ 09 октября 2011

Вы уверены, что катите Cake 1.3? Столько всего, что вы катаете, подходит для Cake 1.2 и устарела в 1.3, что я чувствую, что должен убедиться.

См .: http://book.cakephp.org/view/1358/AJAX

Исправь своих помощников. Javascript и Ajax устарели в 1.3. Кроме того, вам не хватает компонента RequestHandler, который необходим для обнаружения ответов ajax как в 1.2, так и в 1.3:

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

где Jquery может быть именем любой библиотеки, которую вы предпочитаете (хотя Jquery катится по умолчанию.)

Кроме того, в вашем default.ctp должна быть строка с эффектом <?= $scripts_for_layout ?> в заголовке вашего макета. В конце разметки макета, перед закрывающим тегом body, должна быть строка с эффектом <? $this->Js->writeBuffer(); ?>, чтобы очистить буферизованные сценарии.

Примечание: если вы катитесь 1,3, некоторые люди считают, что $this->Html->script лучше, чем $html->script. Я склонен согласиться.

Свертывание двух библиотек (scriptaculous и prototype? Вы уверены, что это необходимо?) Поставляется с собственным набором соображений и методов, обеспечивающих работу всех включенных библиотек в режиме совместимости. Для отладки рассмотрите возможность упростить это хотя бы до одной библиотеки, если jQuery просто не будет работать для вас. Опять же, jQuery катится по умолчанию. Вам нужно было бы правильно включить хелпер Js, как показано выше, за исключением вашей предпочтительной библиотеки, если вы хотите переопределить значение по умолчанию одной из других библиотек. Кроме того, для некоторых типов ответов требуется создать для них макет (например, чтобы избежать ошибок при отправке заголовка), например json, некоторый ajax и т. Д., Чтобы RequestHandler мог правильно их обслуживать.

Разберитесь со всем этим и обратитесь к Js Helper, Html Helper и Form Helper, чтобы настроить вашу функцию autoComplete (), и она должна работать нормально. Или вернитесь к 1.2 и используйте Javascript и Ajax для вашего сердца. : S

HTH:)

...