Не работает ajaxlink()

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
kawabanga
Сообщения: 806
Зарегистрирован: 2013.10.12, 23:35
Откуда: Новосибирск

Не работает ajaxlink()

Сообщение kawabanga »

Доброй ночи всем...

Не вижу явной ошибки... :

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

 <div class="_actions" id="c123">
                    <a href="<?= $this->createAbsoluteUrl('/compare/index', array( 'ids'=>$string, 'catid' => (int)$_GET['id'])); ?>">Сравнить </a>  /

                    <?php echo CHtml::ajaxlink('Очистить' , CController::createUrl('/compare/DestroyCat'), array(
                            'type' => 'POST',
                            'data'=>array('catid'=>(int)$_GET['id'] ,

                            'update' => '#c123'
                        ), array('class'=>'myclass' )
                    )); ?>
                </div>
Есть такой код, он правильно отправляет запрос с помощью ajax (приходит нужное сообщение). Но не обновляется блок #c123 . вообще никак.
При этом $('#c123').html('1'); работает как после страницы, так и с консоли файрфокса. Кто нибудь сталкивался с таким поведением?
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Не работает ajaxlink()

Сообщение SiZE »

Ты в фаербаге глянь ответ от сервера. Что там приходит?
kawabanga
Сообщения: 806
Зарегистрирован: 2013.10.12, 23:35
Откуда: Новосибирск

Re: Не работает ajaxlink()

Сообщение kawabanga »

файрфокс показывает, что ответ отсылается и приходит. Т.е. у меня в соседнем проекте абсолютно тоже самое, но там работает....
Что то я в тупик встал, сейчас еще что нить сделаю и через $('').click сделаю. к слову, разработчики чей сайт дорабатываю так и делали.... может что поменяли в кодах...

http://joxi.ru/Hb7hU4wyTJCiCJ5Hsrc
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Не работает ajaxlink()

Сообщение SiZE »

kawabanga писал(а):Не вижу явной ошибки... :

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

'data'=>array('catid'=>(int)$_GET['id'] ,
скобку забыл.
kawabanga писал(а):

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

CController::createUrl('/compare/DestroyCat') 
масло масленное

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

CHtml::ajaxlink('Очистить' , array('/compare/DestroyCat')....

DestroyCat - на никсах работать перестанет
kawabanga
Сообщения: 806
Зарегистрирован: 2013.10.12, 23:35
Откуда: Новосибирск

Re: Не работает ajaxlink()

Сообщение kawabanga »

Исправил все, но все равно не работает эта ajaxlink .
p.s. временно сделал по событию $click
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Не работает ajaxlink()

Сообщение SiZE »

kawabanga писал(а):Исправил все, но все равно не работает эта ajaxlink .
p.s. временно сделал по событию $click
попробуй для отладки

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

array (
        'type'=>'POST',
        'data'=>array('catid'=>(int)$_GET['id']),
        'success'=>'function(html){ alert("pass"); }'
)
может в консоли какие ошибки JS есть?
kawabanga
Сообщения: 806
Зарегистрирован: 2013.10.12, 23:35
Откуда: Новосибирск

Re: Не работает ajaxlink()

Сообщение kawabanga »

из ошибок в консоле мелочь всякая, 404 not found на картинки,
и по безопасности http:/

так, добавил

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

  'dataType'=>'json',
                                 'success'=>'function(html){ alert("pass"); }' 
алерт после не вылазит. При этом при нажатии на кнопку POST запрос уходит, и приходят все данные...
IStranger
Сообщения: 36
Зарегистрирован: 2011.11.04, 10:46
Контактная информация:

Re: Не работает ajaxlink()

Сообщение IStranger »

Разве так назначается js-обработчик? Префикс 'js:' нужен.
viewtopic.php?f=3&t=17474#p102944
Навтыкайте отладочных ajax-обработчиков до и после запроса, понятнее будет.

А вообще, я бы изучал js-код, который непосредственно в страницу вставляется. Отсюда не видно многих нюансов, типа взаимодействия с другим js на странице
G.Azamat { Web Development / Computer simulation }
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра.
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Не работает ajaxlink()

Сообщение SiZE »

IStranger писал(а):Разве так назначается js-обработчик? Префикс 'js:' нужен.
Все что передается в параметр $ajaxOptions присваивается $htmlOptions['ajax'], который в свою очередь обрабатывается методом clientChange и далее методом ajax, который значения 'beforeSend','complete','error','success' оборачивает классом CJavaScriptExpression. Если заглянуть в последний, то можно увидеть там 2 строчки кода, отвечающие за вырезание 'js:'.

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

public function __construct($code)
    {
        if(!is_string($code))
            throw new CException('Value passed to CJavaScriptExpression should be a string.');
        if(strpos($code, 'js:')===0)
            $code=substr($code,3);
        $this->code=$code;
    } 
Ну и теперь скажи мне, нужен 'js:' и как назначается обработчик? И для чего вообще нужен CJavaScriptExpression?
IStranger
Сообщения: 36
Зарегистрирован: 2011.11.04, 10:46
Контактная информация:

Re: Не работает ajaxlink()

Сообщение IStranger »

Ну, не заглядывал в конструктор)
Это, небось, исторически так сложилось. Надо было отличать обычные текстовые переменные от js-кода (чтобы не оборачивать в кавычки при экспорте в html). Если изначально все было строками, то для этих целей вставлялся префикс. А потом шаблонизатор стал поддерживать объекты, стал называться языком программирования и началось заворачивание в объект (о чем, собственно и написано в офф. документации в классу CJavaScriptExpression). А префикс остался ради совместимости)
G.Azamat { Web Development / Computer simulation }
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра.
Ответить