yii2无效$ this->重定向

时间:2017-11-14 19:14:59

标签: javascript php web yii2

我是yii2的新手。当我单击按钮时,jquery触发向控制器发送ajax请求的事件。这是代码:

$("#save").on('click', function() {
        var data = 'test';
        $.ajax({
            url: 'index.php?r=site%2Fcreate-mockup',
            type: 'POST',
            data: {dat: data},
            success: function(data) {
                console.log(data);
            }
        });
    });

在Mockup类的控制器创建实例

 public function actionCreateMockup()
    {
      if (Yii::$app->request->isAjax)
      {
          $create_model = new Mockup();
          //filling $create_model
          return $this->redirect(Url::to(['site/saved-mockups']));
       }
     }

当我删除$ create_model = new Mockup(); //填充$ create_model,然后就可以了。 Mockup.php:

<?php
namespace app\models;
use yii\base\Model;
use yii\db\ActiveRecord;

class Mockup extends ActiveRecord
{

}

?>

1 个答案:

答案 0 :(得分:2)

由于您使用ajax提交表单并希望在ajax success回调中得到回复,因此您可以继续使用JavaScript来处理其他方案,并在保存提交的数据后重定向用户。

这是让你前进的事情

$("#save").on('click', function() {
    var data = 'test';
    $.ajax({
        url: 'index.php?r=site%2Fcreate-mockup',
        type: 'POST',
        data: {dat: data},
        dataType: 'JSON',
        success: function(response) {
            if(response.success){
                  window.location = response.route //redirect on success
            }else{
                 //handle errors here
            }
        }
    });
});

比你的控制器

    public function actionCreateMockup()
    {
      if (Yii::$app->request->isAjax)
      {
          $create_model = new Mockup();
          //filling $create_model
          \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
          if($create_model->load(\Yii::$app->getRequest()->post()) && $create_model->save()){
             return [
                'success'=> true,
                'route'=> Url::to(['site/saved-mockups'])
             ];
           }else{
             return [
                'success'=> false,
                'errors'=> $create_model->getErrros();
            ];
        }
       }
     }