我使用带有jquery Pjax的GridView小部件在我的Yii2应用程序中显示数据。我需要在网格中进行ajax排序和过滤,所以我将网格配置放在这些代码行之间:
Pjax::begin([
'timeout' => 10000,
'id' => 'products-container',
'clientOptions' => [
'type' => "POST",
],
]);
?>
<?=
GridView::widget([
//grid configuration
])
?>
<?php Pjax::end(); ?>
当我想用列对网格进行排序或使用网格过滤器时,我看到浏览器向服务器发送ajax请求,但在完成ajax后,整个页面重新加载!
或者,即使我在浏览器控制台中执行此代码,在发送ajax请求后,页面也会重新加载。
$.pjax.reload("#products-container", {
"type": "POST"
});
有什么问题?
更新
我发现问题是将服务器的php版本升级到7!我将版本降级到5.6并修复了问题。但是主服务器必须有最新版本,所以我必须使用php 7. pjax和php 7有什么问题? 我的yii版本是2.0.8
答案 0 :(得分:1)
如果Pjax重新加载整个页面,那么这意味着以下两个原因之一:
Exception
。要检查你是否有一个,在你的JS文件中(或某个地方,PJax结束事件发生的地方)写一个额外的事件监听器。例如,如果您有此事件触发器:
$(document).on('pjax:end', function(e) {
alert('Pjax has ended!');
});
然后你也可以这样:
$(document).on('pjax:error', function(event, xhr) {
alert('Pjax failed!');
console.log(xhr.responseText);
event.preventDefault();
});
现在您可以检查Pjax
是否包含错误。如果您看到第一个警报而不是第二个警报,则表示您没有Pjax错误。如果您收到两个警报,则您的回复会包含错误,现在您可以检查您在控制台中获得了什么。
<head>
,<body>
)。这不是错误,但如果您希望在没有页面刷新的情况下获得响应,则浏览器无法理解,因此,尝试完全重新加载。这可能更难解决,因为我不太确定如何防止获取核心HTML标记。对于错误,您至少可以看到错误。但是,正如我所说,它很可能是这里的第一个选择。
您不太可能面对其他类型的结果。我强烈建议您确保通过这两项。