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

时间:2017-03-16 06:19:46

标签: yii2 pjax

  • 警报的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请求,无论打开哪个页面。我们可以触发&#34; / site / toast&#34;在ajax调用哪些可以renderAjax上面的小部件代替在当前网址上发出ajax请求?

由于没有html&#34; a&#34;很好地标记任何&#34;形式&#34;标签里面的widget生成的html,这是正确使用pjax吗?

http://localhost:8081/about-us?_pjax=%23new-alert
  • 表单的Pjax

    另外如果我们在Pjax中包装一个Active Form,我们怎样才能确保没有A标签或嵌套Form触发除容器表单之外的Pjax请求?

1 个答案:

答案 0 :(得分:0)

我已从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);           
    }
}

$。pjax.reload之前检索过其他toast,如果当前的url也有。以上解决方案只能获得与ajax相关的祝酒词。