在404和500上的JQuery Mobile“错误加载页面”

时间:2012-02-25 19:05:17

标签: javascript php jquery-mobile http-status-code-404

我希望jQuery mobile能够导航到页面,如果它们标有500或404.有没有办法让jqm知道这些页面可以导航到?我见过其他使用$( document ).bind( "pageloadfailed")重定向到404页面的解决方案,但我不想这样做。我只想显示我的PHP应用程序生成的404 \ 500页面。感谢。

2 个答案:

答案 0 :(得分:2)

jQuery Mobile知道HTTP状态代码404& 500是错误代码,因此将自动执行其默认错误行为,除非您明确告诉它不这样做。关于pageloadfailed事件的jQuery Mobile docs州:

  

默认情况下,在调度此事件后,框架将显示页面失败消息,并在事件数据对象中包含的延迟对象上调用reject()。回调可以通过在事件上调用preventDefault()来阻止执行此默认行为。

所以...默认行为是劫持您的请求并显示自己的“页面失败消息”。除了默认行为之外,方式可以覆盖默认设置。您必须为pageloadfailed事件编写事件处理程序,但您不必重定向到其他404页面,您只需使用从您的应用程序返回的HTML 。您可以使用恰当命名的方法preventDefault()来停止默认行为。这告诉jQuery你将自己处理错误 - 在这里你可以简单地传递你的应用程序返回的HTML显示。再次,来自文档:

  

在事件上调用preventDefault()的回调,必须在此对象上调用resolve()reject(),以便changePage()请求恢复处理。< / p>

以下是调用resolve()的代码,以便您可以传入HTML以显示:

$( document ).bind( "pageloadfailed", function( event, data ) {

    // Let the framework know we're going to handle things.
    event.preventDefault();

    // at some point, either in this callback, or through
    // some other async means, call resolve, passing in
    // the following args, plus a jQuery collection object
    // containing the DOM element for the page.

    // Extract the HTML response from the Ajax request
    var page = data.xhr.responseText;

    data.deferred.resolve( data.absUrl, data.options, page );

});

答案 1 :(得分:0)

作为Mikes答案的补充,它几乎解决了我的问题,你必须将错误页面添加到pageContainer结构中。

例如:

$( document ).on( "pageloadfailed", function( event, data ) {

    event.preventDefault();

    var page = $( data.xhr.responseText );

    // make sure that the content is displayed
    $.mobile.pageContainer.append( page );

    data.deferred.resolve( data.absUrl, data.options, page );
});