0

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

我的 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));
        }
4

2 回答 2

2

因此,您在通过 ajax 检索 flash 消息时遇到问题?您的控制器看起来不错,该getIsAjaxRequest方法将被触发,但问题是在 DOM 中显示 flash 消息。

首先创建一个 div 来保存你的 flash 消息:

<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 函数,它将起作用

于 2012-12-09T13:50:15.310 回答
0

你需要得到快讯。试着把这段代码放在你的 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; ?>
于 2012-12-10T10:34:34.463 回答