在没有完全刷新的情况下使用 pjax 进行吐司

using pjax for toasts without full refresh

$content 上方的布局文件中包含 alert.php。这是如下:

<?php Pjax::begin(['id'=> 'new-alert','enablePushState' => false]); ?>
        <?= \odaialali\yii2toastr\ToastrFlash::widget([
                'options' => [
                    'positionClass' => 'toast-bottom-full-width',
                    //'progressBar' => true,
                    'timeOut' => 6000,
                    'extendedTimeOut' => 2000                       
                ]
         ]);?>
<?php Pjax::end(); ?>

要在 ajax 中获取 flash 消息,需要调用以下容器

$.pjax.reload({container:'#new-alert'});

这会导致显示警报消息,但也会向 URL 发送 Ajax 请求,无论哪个页面打开。我们可以在 ajax 调用上触发对“/site/toast”的请求,这可以呈现 Ajax 上述小部件,而不是在当前 url 上发出 ajax 请求吗?

因为没有 html "a" 标签,也没有任何 "form" 标签在这里生成的小部件 html,这是对 pjax 的正确使用吗?

http://localhost:8081/about-us?_pjax=%23new-alert

我已从 PHP 中删除对 pjax 的调用,并发出如下警报 -

<div id="new-alert">

        <?= \odaialali\yii2toastr\ToastrFlash::widget([
                    'options' => [
                        'positionClass' => 'toast-bottom-full-width',
                        //'progressBar' => true,
                        'timeOut' => 6000,
                        'extendedTimeOut' => 2000                       
                    ]
        ]); ?>

</div>

相反,我从 javascript 进行 pjax 调用,如下所示 -

$.pjax({url: encodeURI(baseUri + "site/toast"), container: '#new-alert', push: false})

public function actionToast() 
{               
    if(Yii::$app->request->getHeaders()->has('X-PJAX'))
    {
        return $this->renderAjax('//common/alert');
    }
    else
    {
        return $this->redirect(Yii::$app->request->referrer);           
    }
}
如果当前 url 也有一些,

$.pjax.reload 之前会检索其他 toast。以上解决方案仅获取与 ajax 相关的祝酒词。