Yii2 gridview - ajax请求后不需要的页面重新加载

时间:2016-08-11 18:38:48

标签: php yii yii2 pjax

我使用带有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

1 个答案:

答案 0 :(得分:1)

如果Pjax重新加载整个页面,那么这意味着以下两个原因之一:

  • 你的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错误。如果您收到两个警报,则您的回复会包含错误,现在您可以检查您在控制台中获得了什么。

  • 您的Pjax的回复包含核心HTML标记(<head><body>)。

这不是错误,但如果您希望在没有页面刷新的情况下获得响应,则浏览器无法理解,因此,尝试完全重新加载。这可能更难解决,因为我不太确定如何防止获取核心HTML标记。对于错误,您至少可以看到错误。但是,正如我所说,它很可能是这里的第一个选择。

您不太可能面对其他类型的结果。我强烈建议您确保通过这两项。