2016-08-11 134 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

相關問題