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