Php 尝试验证/保存的无限循环

Php 尝试验证/保存的无限循环,php,ajax,yii,Php,Ajax,Yii,我正在使用Yii框架创建一个非常简单的1个文本区域字段和2个隐藏输入,其中包含从服务器发送的预定义值 它的工作方式和预期的一样,我的意思是,你在文本区域写一些东西,然后点击发送按钮。进行ajax验证(文本区域的唯一必要条件是不应为空),如果验证,则保存数据并重定向到其他页面 问题是,如果触发了验证错误,它将不会保存任何数据 我的意思是,如果我进入页面,写一些东西并点击发送按钮,数据将被保存,我将被正确重定向。但是如果我进入页面,点击send按钮(在文本区域中不键入任何内容),等待错误出现(注意,

我正在使用Yii框架创建一个非常简单的1个文本区域字段和2个隐藏输入,其中包含从服务器发送的预定义值

它的工作方式和预期的一样,我的意思是,你在文本区域写一些东西,然后点击发送按钮。进行ajax验证(文本区域的唯一必要条件是不应为空),如果验证,则保存数据并重定向到其他页面

问题是,如果触发了验证错误,它将不会保存任何数据

我的意思是,如果我进入页面,写一些东西并点击发送按钮,数据将被保存,我将被正确重定向。但是如果我进入页面,点击send按钮(在文本区域中不键入任何内容),等待错误出现(注意,这是通过ajax完成的,因此这里没有页面重新加载),写一些东西,然后再次点击send,我将在无限循环中的请求之后开始发出请求

我已经检查了发送的数据,一切正常(数据和操作url)

这是我的控制器代码

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”可能是问题所在。

My
performAjaxValidation
方法与此完全相同。好的,请尝试使用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();
    }
}