ajax запрос

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Alucard
Сообщения: 16
Зарегистрирован: 2009.11.02, 20:27

ajax запрос

Сообщение Alucard »

Млин помогите плиз разобраться, уже устал копаться и ничего не получает :cry:
вобщем не получается отправить запрос с помощью ajax, а точнее ajaxLink.
Имеется виджет который рендит форму:

Код: Выделить всё

<?php echo CHtml::form();?>
<?php echo CHtml::textField('name','',array('size'=>16,'maxlength'=>16));?>
<?php echo CHtml::textField('email','',array('size'=>16,'maxlength'=>16));?>
<?php echo CHtml::ajaxLink('Отправить','site/ajaxSend',array('update'=>'#result'));?>
<?php echo CHtml::endForm();?>
<div id="result"></div>
Этот виджет я подключаю в views site/index
в котроллере site :

Код: Выделить всё

public function actionajaxBay()
    {
    echo $_POST['name'];
    }
 
Как правильно отправить данные??
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: ajax запрос

Сообщение samdark »

При помощи CHtml::ajaxSubmitButton?
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: ajax запрос

Сообщение Ekstazi »

public function actionajaxSend() ???
haiflive
Сообщения: 38
Зарегистрирован: 2010.02.10, 09:32

Re: ajax запрос

Сообщение haiflive »

Подскажите пожалуйста,
как перезагрузить элемент и исполнить javascript.

имеется вот такой линк

Код: Выделить всё

        return CHtml::ajaxLink('Обработать',
            array('','id'=>$id, 'move'=>$move),
            array(
            'type' => 'GET',
            'update' => '#output',
        ),
        array(
            'type' => 'submit'
        ));
 
По его клику перезагружается дерево,точнее всё что заключено в элементе <div>
Но проблема вот в чём, после перезагрузки дерева, его не обрабатывает javaScript и на экране появляется обычный список.
Как запустить javascript для элемента загруженного из ajax?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: ajax запрос

Сообщение samdark »

Обновитесь до только что вышедшего 1.1.1 и попробуйте http://api.jquery.com/live/
haiflive
Сообщения: 38
Зарегистрирован: 2010.02.10, 09:32

Re: ajax запрос

Сообщение haiflive »

Обновился не получилось..

Возможно спецальные методы render() требуются?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: ajax запрос

Сообщение samdark »

Я предлагал написать JS руками, используя live().
mitallast
Сообщения: 207
Зарегистрирован: 2010.02.21, 20:40
Откуда: Голицыно
Контактная информация:

Re: ajax запрос

Сообщение mitallast »

если требуется работа с деревом, может проще использовать плагин для jquery?
http://www.jstree.com/demo
http://plugins.jquery.com/search/node/t ... ect?page=1

если не охота, я бы работал с подобным кодом :

некое дерево, часть которого генерится на сервере:

Код: Выделить всё

<!-- контейнер дерева -->
<div class="ajax_tree">
    <!-- первый уровень дерева -->
    <ul>
        <li>
            <!-- ссылка, которая может загрузить кусок дерева -->
            <?php echo CHtml::link('test', $url); ?>
            <!-- уже загруженный аяксом кусок-->
            <ul>
                <li>
                    <!-- ссылка, которая может загрузить дерево -->
                    <?php echo CHtml::link('test', $url); ?>
                </li>
            </ul>
        </li>
    </ul>
</div>
код js, который обрабатывает наше дерево

Код: Выделить всё

$(document).ready(function(){
    
    // вешаем live событие на все ссылки в дереве, которые загружены и будут загружены
    $('div.ajax_tree a').live('click', function(){
        
        // делаем get запрос по кликнутой ссылке, сервер должен вернуть кусок html.
        (function(element){
            $.get(
                //запрашиваем по адресу текущей ссылки
                $(this).attr('href'),
                //по загрузке
                function(data){
                    //очищаем текущее дерево.
                    $(element).children('ul').remove();
                    //добавляем загруженный кусочек дерева.
                    $(element).append(data);
                }
            );            
        })(this);
        
        return false;
    });
    
});
 
в контроллере, ессно, должен быть определен action, который будет генерить кусок дерева, типа

Код: Выделить всё

public function actionAjaxTree(){
   
   $item = $this->loadItem($_REQUEST['id']);
   $items = $item->getChildrens(); // ищем поддерево
   $this->renderTree($items); // отображаем элементы дерева
   
}
 
Разумеется, наши ссылки должны ссылаться на этот action
haiflive
Сообщения: 38
Зарегистрирован: 2010.02.10, 09:32

Re: ajax запрос

Сообщение haiflive »

Спасибо за ответы.

Нашёл нужное расширение http://www.yiiframework.com/extension/jstree/ думаю буду писать на нём.

Честно не проверял ваш код, но думаю он мне пригодиться.. хех всё гинеальное просто.=)
Ответить