Ajax请求后不显示Yii flash消息

时间:2012-12-09 10:27:52

标签: php yii yii-components

有人知道如何在ajax请求后在YII框架中显示flash消息? 我正在使用标准的Gii生成的CRUD操作。当我在CGridView中创建或更新数据时,我看到了我的Flash消息。但是当删除数据时,现在有闪存,但Yii :: app() - > user-> setFlash('success','我的消息')会在会话中放入消息。

我的actionDelete内容是

$result = $this->loadModel($id)->delete();
        if ($result)
            Yii::app()->user->setFlash('success', 'Data was deleted');
        else
            Yii::app()->user->setFlash('error', 'Error was occurred');

        if (Yii::app()->request->getIsAjaxRequest())
        {
            echo Yii::app()->user->getFlash('success');
        } else {
            $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array(index));
        }

2 个答案:

答案 0 :(得分:2)

因此,您在通过ajax检索Flash消息时遇到问题?您的控制器看起来很好,getIsAjaxRequest方法将被解雇,但问题是在DOM中显示Flash消息。

首先创建一个包含flash消息的div:

<div id="myflashwrapper" style=""display: none;"></div>

然后,在您调用ajax方法的脚本中,您需要添加以下内容:

$('#myflashwrapper').html(message).fadeIn().delay(3000).fadeOut();

这只是将ID为“ myflashwrapper ”的元素的HTML内容更改为返回的Flash消息。如您所见,此函数期望填充名为“ message ”的变量。我们希望您的删除函数echo Yii::app()->user->getFlash('success');中的getIsAjaxRequest作为此值返回。

这意味着您需要修改从默认的Yii CRUD视图中单击删除链接时所执行的javascript。

如果你使用CGridView,你可以使用scriptMap

Yii::app()->getClientScript()->scriptMap = array(
    'jquery.yiigridview.js' => Yii::app()->baseUrl . '/js/custom.gridview.js',
    ...
);

将使用您在此处引用的脚本文件,而不是gridview的默认Yii脚本。显然你只想更改那里的一个函数,所以你可以在这里得到原始的js文件:framework/zii/widgets/assets/gridview/jquery.yiigridview.js

只需复制该文件中的所有内容,将其粘贴到 custom.gridview.js 文件中,修改在删除时调用的ajax函数即可使用

答案 1 :(得分:0)

您需要获取Flash消息。尝试将此代码放在protected / layouts / main.php

<?php foreach(Yii::app()->user->getFlashes() as $key => $message) : ?>
    <div class="flash-<?php echo $key; ?>"><?php echo $message; ?></div>
<?php endforeach; ?>