2016-08-11 139 views
1

我正在使用GridView小部件和jQuery Pjax来显示Yii2应用程序中的数据。我需要在我的网格AJAX排序和过滤,所以我已经把代码的这些字里行间我的网格配置:Yii2 gridview - ajax请求后不需要的页面重新加载

Pjax::begin([ 
    'timeout' => 10000, 
    'id' => 'products-container', 
    'clientOptions' => [ 
     'type' => "POST", 
    ], 
]); 
?> 

<?= 
GridView::widget([ 
    //grid configuration 
]) 
?> 
<?php Pjax::end(); ?> 

当我想排序与一列或使用网过滤器网格,我看到了浏览器向服务器发送ajax请求,但完成ajax后,整个页面重新加载!

或者,即使我在浏览器控制台中执行此代码,发送一个jax请求后,页面将重新加载。

$.pjax.reload("#products-container", { 
    "type": "POST" 
}); 

什么问题?

更新:

我发现问题正在升级的服务器的PHP版本7!我将版本降级到5.6并修复了问题。但主服务器必须有最新版本,所以我必须使用PHP 7. pjax和php 7有什么问题? 我的警予的版本是2.0.8

回答

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标记。对于一个错误,你至少可以看到什么是错的。但是,正如我所说,这很可能是第一个选择。

你不可能面对另一种类型的结果。我强烈建议确保你通过这两个。

+0

谢谢你的回答。我测试过,我没有任何pjax错误。我如何解决第二个问题? – hamed

+0

@hamed查看你的回复。控制台对此有何评论? –

+0

响应是一个包含头部和身体标记的完整html。 – hamed

相关问题