pjax - 错误时渲染页面

时间:2014-06-09 03:46:47

标签: jquery pjax

我正在使用pjax,我想配置它来渲染页面(替换html)就好像一切正​​常,即使页面以非200代码响应(404,500) )。

我的404和500页被调整为看起来不错,而且我不需要pjax来刷新页面。

我无法从我阅读的所有文档中了解如何执行此操作,包括original git repo。欢迎任何帮助。

2 个答案:

答案 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。

我还在努力让它全部正常工作,但我希望这有帮助,因为关于此的文档非常少!