几次发送ajax表单

时间:2013-03-12 05:45:19

标签: jquery ajax yii

我的代码如下:(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)会显示已发送的数据表单(以post方式发布),但view.phppartialrender()中使用actionUpdate呈现},print_r($_REQUEST)表示尽管填写了表单,但已发送的表单中没有数据到服务器。 ?

3 个答案:

答案 0 :(得分: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())
);

Useful Link

答案 1 :(得分:1)

使用此选项可以停止正在重新生成的表单并更新以前的状态:

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

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

答案 2 :(得分:0)

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

success的回调函数中,我应该更新div HTML元素而不是form

改变自:

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

要:

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

感谢朋友们的指导。