как исправить этот сеанс с содержимым окна CJuiDialog в Yii 1.4.x?

Часть, над которой я работаю, является одним из модулей веб-приложения, работающего на Yii 1.4.x. У меня есть CGridView в моем файле представления индекса. Затем внутри него у меня есть пользовательские кнопки. Одна из кнопок вызывает диалоговое окно. вот фрагмент для той пользовательской кнопки, которую я упомянул

        'see' => array(
             'label' => 'View',
             'url' => 'Yii::app()->controller->createUrl("myControllerName/view",array("id" => "$data->id"))',

             'options' => array(
                 'ajax' => array(
                    'type' => 'POST',
                     'url' => "js:$(this).attr('href')",
                     'dataType' => "json",
                     'async' => false,
                     'success' => 'function(data){
                            $("#detail-dialog").dialog("open"); return false;
                        }',
                     'update' => '#detail'
                 )
             )
        ),

Вот фрагмент действия контроллера с именем «представление» в контроллере.

   public function actionView(){

        $gid = $_GET['id'];

        $data = array();
        if(Yii::app()->request->isAjaxRequest) {
            $model = MyModelName::model()->findById($gid);
            if (!empty($model) || !is_null($model)) {
                $attributes = $model->getAttributes();
                $result = MyModelName::model()->findByKey($attributes['key'], $attributes['new_key']);
                if(!empty($result)){
                    foreach($result as $key => $val){
                        $data['model'][$key] = $val;
                    }
                    $data['code'] = self::CODE_AJAX_SUCCESS;
                  }
            } else {
                $data['code'] = self::CODE_AJAX_ERROR;
            }
           $_SESSION['ajaxresponse'] = json_encode($data);
           echo json_encode($data);
           exit;
        }

в нижней части CGridView моего файла представления у меня есть этот фрагмент CJuiDialog

$this->beginWidget('zii.widgets.jui.CJuiDialog', array(
    'id' => 'detail-dialog',
    'options' => array(
        'title' => 'Edit Data',
        'autoOpen' => false,
        'modal' => false,
        'width' => 600,
        'height' => 500,
        'close' => 'js:function(){
            //nothing here
        }'
    ),
)); ?>

$result = $_SESSION['ajaxresponse'];
$this->renderPartial('_view',array('viewajaxresponse' => $result));
$this->endWidget('zii.widgets.jui.CJuiDialog');

Всякий раз, когда я щелкаю строку в CGridView, она выводит окно CJuiDialog вместе с ответом ajax внутри него, потому что я частично отобразил его из сеанса.

Теперь проблема в том, что, скажем, я закрыл окно CJuiDialog, затем щелкнул 2-ю строку или другую строку в CGridView, содержимое диалогового окна остается с первой строкой, которую я щелкнул, если только я принудительно не обновляю браузер, как два или три раза до изменения данных в диалоговом окне. Как решить эту проблему?

Я даже реализовал ajax-функцию события «закрыть» окна CJuiDialog, чтобы убить сеанс.

  $.ajax({
            url: "'.Yii::app()->controller->createUrl("MyControllerName/destroysession", array("s"=>"ajaxresponse")).'",
            type: "POST",
            dataType: "json",
            async: true,
            success: function(data){
               document.location.reload(true);
        }
    });

а затем в действии контроллера

public function actionDestroysession(){
        $name = !empty($_GET['s'])?$_GET['s']:'';
        if(isset($name)){
            unset($_SESSION[$name]);
            $data['code'] = self::CODE_AJAX_SUCCESS;
            echo json_encode($data);
            exit;
        }
        echo $data['code'] = self::CODE_AJAX_ERROR;
        exit;

    }

проблема на этот раз заключается в том, что он полностью убивает сеанс, даже если вы видите в функции, я убил только определенную переменную сеанса, потому что я передал имя, но затем, когда я щелкаю любую из строк в CGridView, данные не отображаются в стороне окно CJuiDialog .. так как решить эту проблему с сеансом?


person sasori    schedule 17.04.2017    source источник


Ответы (1)


Исправление для этого заключалось в том, чтобы никогда не использовать сеансы при создании CJuiTabs внутри окна CjuiDialog. лучше сгенерировать Cjuitab из контроллера, а затем использовать его как ответ ajax на файл представления, который запускает окно CjuiDialog.

person sasori    schedule 24.04.2017