2014-06-09 187 views
1

我使用pjax,我想配置它來渲染頁面(替換html),就好像一切正​​常,即使頁面響應非200代碼(404 ,500)。pjax - 渲染錯誤頁面

我的404頁和500頁被調整好看,我不需要pjax刷新頁面。

我無法弄清楚如何從我讀過的所有文檔中做到這一點,包括original git repo。歡迎任何幫助。

+0

,您應該考慮選擇是正確的給出了答案@fyrite。它對我很好。 –

回答

5

您甚至可以從pjax成功函數:錯誤處理程序,並返回false,以防止自動刷新難:

$(document).on('pjax:error', function(event, xhr, textStatus, errorThrown, options) { 
    options.success(xhr.responseText, textStatus, xhr); 
    return false; 
}); 
+0

謝謝你,這個答案完美工作! –

3

我實際上一直在處理同樣的問題 - 這是jQuery PJAX的奇怪怪癖,當你點擊一個404/500頁面時,它似乎按照你所期望的來執行請求(例如,檢索404頁面的內容),但不是通常的替換,而是重新加載。

當您點擊404/500頁面時觸發的pjax:error事件實際上是導致硬刷新的原因,很像pjax:timeout。你可以做的是使用類似於下面的東西防止硬刷新:

$(document).on('pjax:error', function(event, request) { 
    event.preventDefault(); 
}); 

另外,如果你檢查在上面request對象的內容,你會看到PJAX實際上成功檢索404頁面的內容,可在responseText中找到。在這一點上,我想你可以用jQuery替換你的PJAX容器的全部內容與responseText的內容,但我懷疑這會破壞pushState。

我仍在努力讓所有工作正常,但我希望這有助於解決問題,因爲這方面的文檔很少!

+0

我其實開始寫這個,但沒有檢查'request'變量(我發現的例子沒有收到它)。會很好,如果它只是一個標誌'continue_on_error = true' – Mikhail