如何重新加载多个pjax
How to reload multiple pjax
我只想知道如何重新加载多个pjax?这是我的代码
$.pjax.reload({container:"#con_camp"});
$.pjax.reload({container:"#con_camp1"});
但只有#con_camp1 会重新加载。
试试这个。
$.pjax.reload({container: "#1-pjax", async:false});
$.pjax.reload({container: "#2-pjax", async:false});
当使用 async:false
时,Chrome 和 Firefox 都会抛出这个:
Synchronous XMLHttpRequest on the main thread is deprecated because of
its detrimental effects to the end user's experience. For more help,
check 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]}) ;
你可以这样做
$.pjax.reload({container: '#container_1'}).done(function () {
$.pjax.reload({container: '#container_2'});
});
不幸的是,Pjax 的设计不允许多个请求。为了执行这些操作,您必须使 $.pjax
.
中的 xhr
参数无效
基本上是这样的:
$.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.
要添加到 $.pjax.xhr=null
解决方案中的东西,因为它本身有一个错误 - 它将允许更早但更长的 运行 请求将响应数据加载到目标容器中随后,更快的 运行 请求。这显然是意外行为。用户希望最近的点击是将响应加载到容器中的点击。
解决方案是在下一个 pjax 事件中可以访问的某个地方添加对先前 xhr 对象的引用。我使用 window 命名空间
$('.pjax-container').on('pjax:send', function(event, xhr, options) {
// unique data attribute of the pjax container
xhrName=$(this).attr('data-myXhrName');
// abort pending requests because we are allowing multiples
if (window.xhrRef[xhrName]) {
window.xhrRef[xhrName].abort();
}
$.pjax.xhr=null;
window.xhrRef[xhrName]=xhr;
})
.on('pjax:complete', function(event, xhr, options) {
xhrName=$(this).attr('data-myXhrName');
// we're done with it
window.xhrRef[xhrName]=false;
})
我遇到过同样的问题,我是这样处理的。
<?php Pjax::begin(['id'=>'pjax_id']); ?>
<?php Pjax::end(); ?>
// Under SCRIPT tag
$.pjax.reload({container: '#pjax_id', async: false});
我只想知道如何重新加载多个pjax?这是我的代码
$.pjax.reload({container:"#con_camp"});
$.pjax.reload({container:"#con_camp1"});
但只有#con_camp1 会重新加载。
试试这个。
$.pjax.reload({container: "#1-pjax", async:false});
$.pjax.reload({container: "#2-pjax", async:false});
当使用 async:false
时,Chrome 和 Firefox 都会抛出这个:
Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check 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]}) ;
你可以这样做
$.pjax.reload({container: '#container_1'}).done(function () {
$.pjax.reload({container: '#container_2'});
});
不幸的是,Pjax 的设计不允许多个请求。为了执行这些操作,您必须使 $.pjax
.
xhr
参数无效
基本上是这样的:
$.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.
要添加到 $.pjax.xhr=null
解决方案中的东西,因为它本身有一个错误 - 它将允许更早但更长的 运行 请求将响应数据加载到目标容器中随后,更快的 运行 请求。这显然是意外行为。用户希望最近的点击是将响应加载到容器中的点击。
解决方案是在下一个 pjax 事件中可以访问的某个地方添加对先前 xhr 对象的引用。我使用 window 命名空间
$('.pjax-container').on('pjax:send', function(event, xhr, options) {
// unique data attribute of the pjax container
xhrName=$(this).attr('data-myXhrName');
// abort pending requests because we are allowing multiples
if (window.xhrRef[xhrName]) {
window.xhrRef[xhrName].abort();
}
$.pjax.xhr=null;
window.xhrRef[xhrName]=xhr;
})
.on('pjax:complete', function(event, xhr, options) {
xhrName=$(this).attr('data-myXhrName');
// we're done with it
window.xhrRef[xhrName]=false;
})
我遇到过同样的问题,我是这样处理的。
<?php Pjax::begin(['id'=>'pjax_id']); ?>
<?php Pjax::end(); ?>
// Under SCRIPT tag
$.pjax.reload({container: '#pjax_id', async: false});