我正在使用pjax,我想配置它来渲染页面(替换html)就好像一切正常,即使页面以非200代码响应(404,500) )。
我的404和500页被调整为看起来不错,而且我不需要pjax来刷新页面。
我无法从我阅读的所有文档中了解如何执行此操作,包括original git repo。欢迎任何帮助。
答案 0 :(得分:5)
您可以从pjax:error处理程序调用success函数,并返回false以防止自动硬刷新:
$(document).on('pjax:error', function(event, xhr, textStatus, errorThrown, options) {
options.success(xhr.responseText, textStatus, xhr);
return false;
});
答案 1 :(得分:3)
我实际上一直在处理同样的问题 - 这是一个奇怪的jQuery PJAX怪癖,当你点击404/500页面时,它似乎按照你的预期执行请求(即检索你的内容) 404页面),但不是做通常的替换,而是重新加载。
当您点击404/500页面时触发的pjax:error
事件实际上是导致硬刷新的原因,就像pjax:timeout
一样。您可以做的是通过使用类似于以下内容的东西来防止硬刷新:
$( document ).on('pjax:error', function( event, request ) {
event.preventDefault();
});
另外,如果你检查上面request
对象的内容,你会发现PJAX实际上成功地检索了responseText
中提供的404页面的内容。 。此时我想你可以使用jQuery用responseText
的内容替换PJAX容器的全部内容,但是我怀疑这会破坏pushState。
我还在努力让它全部正常工作,但我希望这有帮助,因为关于此的文档非常少!