如何重新加载多个pjax

时间:2015-08-13 10:09:51

标签: yii2 pjax

我只是想知道如何重新加载多个pjax?这是我的代码

        $.pjax.reload({container:"#con_camp"});
        $.pjax.reload({container:"#con_camp1"});

但只有#con_camp1才会重新加载。

6 个答案:

答案 0 :(得分:16)

试试这个。

   $.pjax.reload({container: "#1-pjax", async:false});
    $.pjax.reload({container: "#2-pjax", async:false});

答案 1 :(得分:5)

你可以做到

$.pjax.reload({container: '#container_1'}).done(function () {
    $.pjax.reload({container: '#container_2'});
});

答案 2 :(得分:5)

不幸的是,Pjax设计并不允许多个请求。为了完成这些操作,您必须使xhr中的$.pjax参数无效。

基本上是这样的:

$.pjax.reload({container:"#con_camp"});
$.pjax.xhr = null;
$.pjax.reload({container:"#con_camp1"});
$.pjax.xhr = null; // so that some next pjax request wont cancel this reload.

答案 3 :(得分:2)

使用async:false时,Chrome和Firefox都会抛出这个:

  

主线程上的同步XMLHttpRequest因不推荐使用   它对最终用户的体验产生不利影响。如需更多帮助,   检查https://xhr.spec.whatwg.org/

另一种方法是使用pjax:end事件,该事件将在完全重新加载容器时触发,以注册将重新加载下一个容器的代码。这样他们就可以逐个重新加载:

var pjaxContainers = ['#pjax-block-1', '#pjax-block-2', '#pjax-block-3'];

$.each(pjaxContainers , function(index, container) { 
     if (index+1 < pjaxContainers.length) {
          $(container).one('pjax:end', function (xhr, options) {
               $.pjax.reload({container: pjaxContainers[index+1]}) ;
          });
     }
});

$.pjax.reload({container: pjaxContainers[0]}) ;

答案 4 :(得分:0)

要添加到.images img, .images p { display:block; } 解决方案中的东西,因为它本身就有一个错误-它将允许更早但运行时间更长的请求在随后的,运行速度更快的请求之后将响应数据加载到目标容器中。这显然是意外行为。用户希望将最新的点击加载到容器中。

解决方案是在下一个pjax事件可以访问的位置添加对先前xhr对象的引用。我使用窗口名称空间

$.pjax.xhr=null

答案 5 :(得分:0)

我也遇到过同样的问题,

 <?php Pjax::begin(['id'=>'pjax_id']); ?>

 <?php Pjax::end(); ?>

// Under SCRIPT tag
    $.pjax.reload({container: '#pjax_id', async: false});