jQuery Mobile знает, что коды состояния HTTP 404 и 500 являются кодами ошибок, и поэтому автоматически выполнит поведение ошибки по умолчанию, если вы специально не скажете ему сделать иначе. jQuery Mobile docs сообщает о событии pageloadfailed
:
По умолчанию после отправки этого события платформа отобразит сообщение об ошибке страницы и вызовет reject()
для отложенного объекта, содержащегося в объекте данных события. Обратные вызовы могут помешать выполнению этого поведения по умолчанию, вызывая preventDefault()
для события.
Итак ... стандартное поведение - перехватить ваш запрос и показать свое собственное «сообщение об ошибке страницы». только способ получить что-то помимо поведения по умолчанию - переопределить настройку по умолчанию. Вы do должны написать обработчик события pageloadfailed
, но вам не нужно перенаправлять на другую страницу 404, вы можете просто использовать HTML-код, возвращенный из вашего приложения. Вы можете остановить поведение по умолчанию с метко названным методом preventDefault()
. Это говорит jQuery, что вы сами обработаете ошибку - и здесь вы можете просто передать HTML-код, который вернуло ваше приложение для отображения. Опять же из документов:
Обратные вызовы, которые вызывают preventDefault()
для события, ДОЛЖНЫ вызывать resolve()
или reject()
для этого объекта, так что changePage()
запрашивает возобновление обработки.
Вот код, который вызывает 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 );
});