set->从Jquery调用时Flash无法正常工作

时间:2015-11-18 23:08:38

标签: jquery cakephp

我正在开发一个CakePHP项目,在一个视图中,我在控制器中调用一个方法,如下所示:

var addEnv = "<?php echo $this->Html->url(array('action' => 'controller_method')) ?>";
$.post( addEnv, function(  ) {
     location.reload();
});

控制器方法如下所示:

 public function controller_method()
    {
       if($this->request->is('post'))
       {   
            $this->someTable->set(array(
            'comments' => "PUM"
          ));
          $this->someTable->save();
          $this->Session->setFlash(__('DATA SAVED SUCCESSFULLY', true), 'alert-success');
          return $this->redirect(array('action' => 'edit'));
       }
   }

该方法正常工作,并且我被重定向到编辑视图,这是我期望的行为,但是没有显示带有DATA SAVED SUCCESSFULLY文本的消息,成功地在另一个视图上使用了相同的setFlash方法。

为什么我在视图上看不到消息?

1 个答案:

答案 0 :(得分:1)

看起来controller_method()正在呈现'action'=>'edit'的视图(通过重定向)并将其作为对$ .post()的响应返回

渲染&#39;编辑&#39;视图可能包含您的Flash消息,然后您正在使用javascript($ .post中的成功回调)来重新加载页面。自编辑&#39; view已经显示了flash消息,重新加载页面后它不会再显示。

您可以检查$ .post响应以查看您的Flash消息是否在那里。如果是这种情况,请让cake方法响应而不渲染视图。我认为这会奏效:

public function controller_method()
{
    if($this->request->is('post'))
    {
        $this->autoRender = false;
        $this->someTable->set(array(
          'comments' => "PUM"
        ));
        $this->someTable->save();
        $this->Session->setFlash(__('DATA SAVED SUCCESSFULLY', true), 'alert-success');
        return;
    }
}