0

以下是我的代码:(Yii 框架)

查看表格:view.php

<div class="form">
<?php
    $form = $this->beginWidget('CActiveForm',array(
        'id'=>'user-profile',
        'action' => 'index.php?r=upanel/user/update',
        'method' => 'post',
    ));
?>
    <?php $form->errorSummary($model) ?>
     . . .
     . . .
     . . .
     . . .
     . . .
    <div class="row buttons">
        <?php
            $url = Yii::app()->createUrl('upanel/user/update');
            echo CHtml::ajaxSubmitButton('Update Profile',$url,array(
                'type'=>'POST',
                'data'=> "js:$('#user-profile').serialize()",//var data = $('#user-form').serialize();
                'datatype'=>'html',
                'success'=>'callback',
                'error'=>'error',
            ));
        ?>
    </div>

<?php $this->endWidget() ?>
</div> <!-- End CActiveForm-->

<p><?php echo Yii::app()->user->getFlash('success') ?></p>

<script>
function callback(data,status){
    if (status=='success')
            $('#user-profile').html(data);
}

function error(jqXHR, textStatus , errorThrown){
    console.log(jqXHR);
    $('#error').html('callback error');
}
</script>

控制器中的动作更新:actionUpdate()

public function actionUpdate()
{
    $model=$this->loadModel(Yii::app()->user->id);
    $model->scenario = 'updateProfile';

    if(isset($_POST['User'])){
        $model->attributes=$_POST['User'];
        if($model->validate()){
            if ($model->save()){
                    Yii::app()->user->setFlash('success','Successfully Updated');
                    $this->renderPartial('view',array('model'=>$model));
            }
        }
    }
}

问题是:第一次发送表单时,print_r($_REQUEST)显示已发送的数据表单(在 post 方法中),但在使用inview.php渲染之后,尽管表单已填写,但显示发送到服务器的表单中没有数据。?partialrender()actionUpdateprint_r($_REQUEST)

4

3 回答 3

2

处理 ajax 按钮时请注意这些点,链接在 Yii 中。

1.当使用 CHtml::ajaxSubmitButton 或 CHtml::AjaxLink 时使用'live'=>false并且应该有一个唯一的 id:

array('id'=>'uniqueId', 'live'=>false)

2.如果是AJAX请求,使用

$this->renderPartial('_view', array(
                   'model'=>  $model,
               ), false, true);

3.如果是正常请求使用

$this->renderPartial('_view', array(
                   'model'=>  $model,
           ), false, false);

4.为您的ajax链接或按钮分配一个随机ID

CHtml::ajaxLink('send a message', '/message', 
    array('replace' => '#message-div'), 
    array('id' => 'send-link-'.uniqid())
);

有用的链接

于 2013-03-12T07:14:43.377 回答
1

使用它来停止重新生成表单并更新 previos 状态:

$this->renderPartial('view',array('model'=>$model),false,true);

注意false,true在 renderPartial 方法中添加的。

于 2013-03-12T06:47:03.123 回答
0

解决了。只是一个笨拙的错误。

在回调函数中,success我应该更新了divHTML 元素form

变化自:

function callback(data,status){
    if (status=='success'){
            $('#user-profile').html(data);
    }

到:

function callback(data,status){
    if (status=='success'){
            $('#user-profile-div').html(data);
    }

谢谢朋友指导。

于 2013-03-12T10:39:11.647 回答