ajaxSubmitButton:控制器操作不在Yii中重定向

时间:2012-02-17 06:50:33

标签: php ajax yii

我正在使用ajaxSubmitButton将数据发送到我的控制器。然后,该控制器操作在事务中生成两个插入语句。一切正常。我现在想要的是,一旦交易完成后重定向到新视图,但我无法使其工作。

当我点击我的按钮时,处理了交易,但我仍然在同一页面上。我也尝试过使用'更新'在页面的按钮和包装部分内,但没有内容更新。这不是我最终的目标,因为我想最终呈现一个全新的视角。

这是我的......

查看

 echo CHtml::ajaxSubmitButton('submit',          
        array('/player/mark'), 
        array(
                'type'=>'POST',
                'data' => array(...),
        ));

CONTROLLER

public function actionMark() 
{
        $connection = yii::app()->db;
        $transaction=$connection->beginTransaction();
        try 
        {       
                $connection = yii::app()->db;
                $sql1 = "INSERT ...";
                $command=$connection->createCommand($sql1);
                ...
                $command->execute();


                $connection = yii::app()->db;
                $sql2 = "INSERT ...";
                $command=$connection->createCommand($sql2);
                ...
                $command->execute();

                $transaction->commit();
                $this->redirect(array('manage'));  // THIS IS NOT WORKING
        }
        catch(Exception $e)
        {
                $transaction->rollBack();
                $this->refresh;
        }
}

2 个答案:

答案 0 :(得分:6)

由于您使用的是ajax,因此重定向无法正常工作。

试试这段代码:

echo CHtml::ajaxSubmitButton('submit',          
        array('/player/mark'), 
        array(
                'type'=>'POST',
                'data' => array(...),
                'success' => 'js:function(){window.location="your_url"}', 
        ));

将* your_url *替换为您想要重定向到

的网址

答案 1 :(得分:1)

您应该在运行成功后添加window.location js。 参考this ajax submition button example

echo CHtml::ajaxSubmitButton(
    'Submit',
    '/post/ajax',
    array(
       'type'=>'POST',
       'dataType'=>'json',
       'success'=>'js:function(data){
           if(data.result==="success"){
              window.location="your_url"
           }else{
             $("#some-container").html(data.msg);
           }
       }',
    )
);

更多Yii examples