Php 尝试验证/保存的无限循环
我正在使用Yii框架创建一个非常简单的1个文本区域字段和2个隐藏输入,其中包含从服务器发送的预定义值 它的工作方式和预期的一样,我的意思是,你在文本区域写一些东西,然后点击发送按钮。进行ajax验证(文本区域的唯一必要条件是不应为空),如果验证,则保存数据并重定向到其他页面 问题是,如果触发了验证错误,它将不会保存任何数据 我的意思是,如果我进入页面,写一些东西并点击发送按钮,数据将被保存,我将被正确重定向。但是如果我进入页面,点击send按钮(在文本区域中不键入任何内容),等待错误出现(注意,这是通过ajax完成的,因此这里没有页面重新加载),写一些东西,然后再次点击send,我将在无限循环中的请求之后开始发出请求 我已经检查了发送的数据,一切正常(数据和操作url) 这是我的控制器代码Php 尝试验证/保存的无限循环,php,ajax,yii,Php,Ajax,Yii,我正在使用Yii框架创建一个非常简单的1个文本区域字段和2个隐藏输入,其中包含从服务器发送的预定义值 它的工作方式和预期的一样,我的意思是,你在文本区域写一些东西,然后点击发送按钮。进行ajax验证(文本区域的唯一必要条件是不应为空),如果验证,则保存数据并重定向到其他页面 问题是,如果触发了验证错误,它将不会保存任何数据 我的意思是,如果我进入页面,写一些东西并点击发送按钮,数据将被保存,我将被正确重定向。但是如果我进入页面,点击send按钮(在文本区域中不键入任何内容),等待错误出现(注意,
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));
}
}
以及视图中的代码
<?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
);
?>
这是“\u mensaje\u表单”代码
你知道我为什么会得到这个循环吗?我猜(有点长)你的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();
}
}
这可能对你有帮助
在您看来,renderPartial中的最后一个参数“true”可能是问题所在。MyperformAjaxValidation
方法与此完全相同。好的,请尝试使用firebug检查ajax请求的行为。它真的着火了吗?这是无限循环的一部分吗?我想你在那一个上把我弄丢了:s。表单每秒都会发出一些请求,所以我想说是的,ajax请求会被触发。整个无限循环是表单在一个请求之后执行一个请求,并且所有请求都包含正确的数据,每个请求的结果都是“[](通过验证)完全删除该参数(暂时)并重试。你是对的!这是导致错误的原因!非常感谢!:)
protected function performAjaxValidation($model)
{
if(isset($_POST['ajax']) && $_POST['ajax']==='exact-form-id')//should be mensaje-form
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
}