在没有完全刷新的情况下使用 pjax 进行吐司
using pjax for toasts without full refresh
- 用于警报的 Pjax
$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
表单的 Pjax
另外,如果我们在Pjax中包装一个Active Form,我们如何确保none的A标签或嵌套Form触发一个Pjax请求,除了容器表单?
我已从 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 相关的祝酒词。
- 用于警报的 Pjax
$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
表单的 Pjax
另外,如果我们在Pjax中包装一个Active Form,我们如何确保none的A标签或嵌套Form触发一个Pjax请求,除了容器表单?
我已从 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 相关的祝酒词。