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: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)、データ フォームが送信されたことを示します (ポスト メソッドで)。ただし、その後 in でレンダリングview.phpされ、フォームが入力されているにもかかわらず、サーバーに送信されたフォームにデータがないことが示されます。?partialrender()actionUpdateprint_r($_REQUEST)

4

3 に答える 3

2

Yii で ajax ボタン、リンクを扱うときは、これらの点に注意してください。

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 に答える
0

解決しました。ただの不器用なミスです。

のコールバック関数では、代わりに HTML 要素successを更新する必要があります。divform

変更元:

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 に答える