我的代码如下:(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.php
在partialrender()
中使用actionUpdate
呈现},print_r($_REQUEST)
表示尽管填写了表单,但已发送的表单中没有数据到服务器。 ?
答案 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())
);
答案 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);
}
感谢朋友们的指导。