Передать данные в ajax post, в CButtonColumn

Всем привет!

Задача отослать аяксом пост запрос с данными сторочки из таблицы(хотябы просто id строки), при нажатии на соответсвующей этой строке кнопку CButtonColumn, данные в таблице представлены через CGridView

делаю так:


                array(

                    'class' => 'CButtonColumn',

                    'template'=>'{update}',

                    'buttons'=>array

                        (

                        'update' => array

                        (

                            //'url'=>'$data->id',

                            'url'=>'"price/update/getForm"',

                            'options'=>array(

                                'ajax'=>array(

                                    'type'=>'POST',

                                    'url'=>"js:$(this).attr('href')",

                                    'data'=>'id=<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' />',

                                    'error' => 'js:function(error)   {console.log(\'error:\'+error)}',

                                    'success'=>'js:function(response){console.log(\'success:\'+response);}',

                                 ),

                            ),

                            'label'=>'',

                        ),),

                     ),

При этом пост успешно уходит и приходит ответ через ajax. Но как мне внедрить данные строки грида в ajax data?

Вобщем сам спросил, сам отвечаю… скрипты немного оптимизированы, ради общего уменьшения html(у меня на странице довольно много таблиц… больше 20) КОРОЧЕ!

Вьюха:

  • часть JS скриптов:

<?php

Yii::app()->clientScript->registerScript('update', "


function setContentDialogUpdate(dialog_content_div, content)

{

    $(\"#\"+dialog_content_div).html(content);

}


function openDialogUpdate(dialog_id, dialog_content_div)

{

    $(\"#\"+dialog_content_div).html('<div id=\"preload_dialog_div\"></div>');

    $(\"#\"+dialog_id).dialog(\"open\");

}


function sendAjaxPostUpdate(elem, dialog_content_div)

{

    $.ajax({

          url:\"price/update\",

          type:\"POST\",

          data:{ id: $(elem).closest(\"tr\").children(\"td:eq(0)\").text() },

          dataType:\"html\",

          error:function(error){console.log('error:'+error)},

          success:function(response){

            console.log('success:'+response);

            setContentDialogUpdate(dialog_content_div, response);

            return false;

         }

    });

}


"); ?>

  • виджет CJuiDialog

<?php

            $this->beginWidget('zii.widgets.jui.CJuiDialog', array(

                'id'=>'dialog_update',

                // additional javascript options for the dialog plugin

                'options'=>array(

                    'title'=>'Редактирование',

                    'autoOpen'=>false,

                    'modal'=>true,

                    'width'=>'400',

                    'height'=>'300',

                ),

            ));

                echo '<div id="dialog_content_div"></div>';

                

            $this->endWidget('zii.widgets.jui.CJuiDialog'); ?>

  • часть грида CGridView, там где кнопка update

                array(

                    'class' => 'CButtonColumn',

                    'template'=>'{update}',

                    'headerHtmlOptions'=>array(

                                'style'=>'width:0px;',

                            ),

                    'htmlOptions'=>array(

                                'style'=>'width:0px;',

                            ),

                    'buttons'=>array

                        (

                        'update' => array

                        (

                            'url'=>'"#"',

                            'label'=>'',

                            'click'=>'function(){

                                openDialogUpdate("dialog_update", "dialog_content_div");

                                sendAjaxPostUpdate(this, "dialog_content_div");

                                return false;

                            }',

                        ),),

                     ),

Принцип примерно такой, есть страничка на ней табличка (CGridView), в таблице в первом поле всегда ID - Pk (из БДе), в последней колонке кнопка с кнопкой редактирования.

Кликаем на кнопку редактирования открывается CJuiDialog (там див с прелоадом в контенте, картинка или просто надпись… loading… в моём случае картинка с анимацией .gif, как background через css)

Дальше идёт Post запрос на сервак в "price/update" в POST данных приходит Id -Pk … дальше кто как намутит, я буду отправлять html от CActiveForm… Вобщем возвращается ответ от экшина update контроллера price, и пишется всё в контент нашего открытого CJuiDialog вместо прелоадера, юзер кликает на окне [close]

JS скрипты всё-таки лучше вынести в отдельный файл или хотя бы воспользоваться такой конструкцией:




$js = <<<JS

function ...

JS;

Yii::app()->clientScript->registerScript('update', $js);



Не нужно будет экранировать каждую кавычку :)

Да, конечно! и дело не только в кавычках… тут главное само взаимодействие всех элементов.