在小部件或控制器中发布ajax表单yii

时间:2014-02-25 13:36:26

标签: ajax yii

我有一个我希望通过ajax发布的表单。我不确定表格会在哪里发布? ajax链接调用控制器,小部件呈现视图......但我不再那么肯定了。现在它不发布;它没有“成功”。它发布的唯一方法就是我在窗口小部件中$model->save(),这是不正确的..还是我将所有内容从控制器粘贴到窗口小部件?那么如何从视图中调用ajax链接?

我想检查帖子是否已发布。我知道我也可以通过自定义模型验证来实现,无论哪种方式,它都没有正确发布。

这是控制器:

$model=new Review;
$this->performAjaxValidation($model);

$user_id = Yii::app()->user->user_id;
$prod_id= Yii::app()->getRequest()->getQuery('id');
$model->user_id = $user_id;
$model->prod_id= $prod_id;

$criteria = new CDbCriteria;
$criteria->compare('prod_id',$prod_id,true);
$criteria->compare('user_id',$user_id,true);
$record = $model->findAll($criteria);

$model->attributes=$_POST['Review'];

if(empty($record))
    {
    //stuff..
    $model->save();
    echo CJSON::encode(
        array('status'=>'success',
            'star'=>$model->star,
            //stuff..
    ));
    return $model->review;
    }
elseif(!empty($record))
{echo CJSON::encode(
        array('status'=>'dup'
    ));
}
else echo CJSON::encode(
    array('status'=>'error'
    ));
Yii::app()->end();

这是我的ajaxbutton

<?php echo CHtml::ajaxSubmitButton ( ' Submit Review',
CHtml::normalizeUrl(array('review/ajaxComment','render'=>true)),
    array (
        'type' => 'POST',
        'dataType' => 'json',
        'success' => 'function(data){
            if(data.status == "success"){
            if(data.star != undefined){
            document.getElementById("review-form").reset();
            $("input[type=radio]","#review-form").rating("select",0);
                    for (i=0;i<data.star; i++){
                    $("#star").append("<i class=\"fa fa-star\"></i>");
                    }
                    $(".bubble").css("display","block");
                }
            }else if(data.status == "dup"){alert("duplicate");}
            }else
            }{alert("Error Posting")};
                     }',
        'error'=> 'function(xhr, status, error) {alert(xhr.responseText);}',

        )
    )
?>

我的小部件中没有太多内容,只是渲染表单。

2 个答案:

答案 0 :(得分:0)

视图应包含窗口小部件和窗体(尽管窗体可以通过窗口小部件或类似方式包含在内)。当suer点击ajax按钮时,按钮应调用控制器中的相应方法,然后控制器向视图发回响应。

答案 1 :(得分:0)

您的代码非常混乱,您使用$ model搜索并保存新记录,您确定不会导致问题吗?

您可能不应在窗口小部件中执行保存。