2012-06-04 4 views
11

У меня есть приложение HTML5, которое использует манифест кэша для обеспечения автономной работы. Это приложение делает вызовы ajax, когда он-лайн, и некоторые из этих вызовов могут получить 403 неавторизованных в ответ.HTML-кэш-манифест: неуспешные вызовы ajax get fallback

Вот нижняя часть моего файла cache.manifest:

NETWORK: 
* 

FALLBACK: 
//offline 

Если удалить раздел резервный, все вызовы Ajax, получающие работу 403 ответа, как и ожидалось, и я могу обнаружить это с помощью JQuery обработчик ошибок и перенаправление пользователь в форме входа.

Но если имеется запасной раздел, то те же вызовы получают ответ 200 OK, при этом резервный контент HTML является телом, хотя сервер ответил с 403, поэтому мне не известно, что пользователь не аутентифицирован и необходимо отправить на страницу входа в систему.

Я что-то упустил? Заранее спасибо

+0

Вы имеете в виду резервное копирование выполняется, даже когда пользователь находится в сети, а файл действительно не существует? – Ekim

+0

Да, вы ожидаете, что подстановочный флаг онлайн ('*') переопределит введенные вами резервные копии. Но он работает по-другому, по [спецификации] (http://www.w3.org/TR/2011/WD-html5-20110525/offline.html#parsing-cache-manifests) –

ответ

2

Добавление случайного числа в качестве параметра запроса на страницу, которую вы ищете для jQuery-AJAX, решит проблему; т.е.

$.ajax({ 
    url: "/data.html?"+ Math.random(), 
    // other properties here... 
}); 
0

От http://alistapart.com/article/application-cache-is-a-douchebag#latest

Вот ссылка, что ошибки могут возникать из-за сообщения о коде состояния как 0, который интерпретируется как отказ:

$.ajax(url).always(function(response) { 
// Exit if this request was deliberately aborted 
if (response.statusText === 'abort') { return; } // Does this smell like an error? 
if (response.responseText !== undefined) { 
    if (response.responseText && response.status < 400) { 
    // Not a real error, recover the content resp 
    } 
    else { 
    // This is a proper error, deal with it 
    return; 
    } 
} // do something with 'response' 
});