2013-03-12 43 views
0

还有就是我在下面的代码:(Yii框架)发送Ajax的形式,几个时间

查看形式: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)显示已发送的数据表单(在后处理方法中),但在此之后view.phppartialrender()actionUpdate,print_r($_REQUEST)表示尽管表单已填充,但发送到服务器的表单中没有数据。 ?

回答

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); 
    } 

感谢朋友们的指导。

1

使用该停止的形式进行再生和previos状态更新用:

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

注中的RenderPartial方法添加的false,true

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

+0

我这样做,但没有效果。我正在尝试调试程序,但会等待指导的朋友。 – msoa 2013-03-12 08:10:09