我正在使用Yii框架创建一个非常简单的1文本区域字段和2个隐藏的输入,其中包含从服务器发送的预定义值。
它的工作方式是按预期,我的意思是,你在该文本区域写了一些东西,然后点击发送按钮。进行ajax验证(只有文本区域的必要条件不应为空),如果经过验证,则保存数据并重定向到其他页面。
问题是如果触发了验证错误,它将不会保存任何数据。
我的意思是,如果我转到页面,写一些内容并点击发送按钮,数据将被保存,我将被正确重定向。但是如果我转到页面,点击发送按钮(不在文本区域中输入任何内容),等待出现错误(注意这是通过ajax完成的,所以没有页面重新加载在这里写一些东西并再次点击发送 Yii将在无限循环中的请求之后开始发出请求。
我已经检查了正在发送的数据,一切都很好(数据和动作网址都有)。
这是我的控制器代码
public function actionView($id)
{
$user = Usuario::model()->findByAttributes(
array(
'nick'=>Yii::app()->user->getId()
)
);
$dataProvider=new CActiveDataProvider('Mensaje', array(
'criteria'=>array(
'with'=>array('usuario', 'usuario.detallesusuario'),
'condition'=>'Tema_idtema='.$id
),
'pagination'=>array(
'pageSize'=>1000,
),
));
$this->render('view',array(
'model'=>$this->loadModel($id),
'usuario_id'=>$user->idusuario,
'tema_id'=>$id,
'dataProvider'=>$dataProvider,
));
}
public function actionCreateMessage(){
$model=new Mensaje;
$this->performAjaxValidation($model);
if(isset($_POST['Mensaje']))
{
$model->attributes=$_POST['Mensaje'];
$model->fecha_hora=new CDbExpression('NOW()');
$model->save();
$this->redirect(array('view', 'id'=>$model->Tema_idtema));
}
}
来自View的代码
<?php
$model = new Mensaje();
echo $this->renderPartial('_mensaje_form', array(
'model'=>$model,
'usuario_id'=>$usuario_id,
'tema_id'=>$tema_id,
),
false, //return instead of echo
true //post-process
);
?>
这是“_mensaje_form”代码
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'mensaje-form',
'action'=>CHtml::normalizeUrl(array('tema/createMessage')),
'enableAjaxValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
'validateOnChange'=>false,
'validateOnType'=>false,
),
)); ?>
<?php echo $form->errorSummary($model); ?>
<div class="row" style="margin:20px 5px 0 176px;">
<?php echo $form->labelEx($model,'mensaje'); ?>
<?php echo $form->textArea($model,'mensaje',array('rows'=>6, 'cols'=>50)); ?>
<?php echo $form->error($model,'mensaje'); ?>
<?php echo $form->hiddenField($model, 'Tema_idtema', array('value'=>$tema_id)); ?>
<?php echo $form->hiddenField($model, 'Usuario_idusuario', array('value'=>$usuario_id)); ?>
</div>
<div class="row buttons" style="margin:-3px 0 -8px 176px;">
<?php echo CHtml::submitButton($model->isNewRecord ? 'Responder' : 'Guardar'); ?>
</div>
<?php $this->endWidget(); ?>
知道为什么我要接受这个循环吗?
答案 0 :(得分:1)
我的猜测(有点远)你preformAjaxValidation()
中的表单ID 可能有误,所以它会导致循环!因为它不会进入if
的主体,因此执行Yii::app()->end();
!!
在控制器:
中查看protected function performAjaxValidation($model)
{
if(isset($_POST['ajax']) && $_POST['ajax']==='exact-form-id')//should be mensaje-form
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
}
答案 1 :(得分:1)
这可能对您有帮助,
http://www.yiiframework.com/forum/index.php/topic/10427-ajax-clientscript/
在您的视图中,renderPartial中的最后一个参数“true”可能是问题。