Манифест кеша HTML5: неудачные вызовы ajax становятся резервными

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

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

NETWORK:
*

FALLBACK:
/ /offline

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

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

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


person Jonathan Naguin    schedule 04.06.2012    source источник
comment
Вы имеете в виду, что резервный вариант выполняется, даже когда пользователь находится в сети, а файла действительно не существует?   -  person Ekim    schedule 06.08.2012
comment
Да, вы ожидаете, что онлайновый подстановочный знак (*) переопределит то, что вы ввели в качестве резервного варианта. Но это работает наоборот, согласно спецификация   -  person Steve Campbell    schedule 22.08.2012


Ответы (2)


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

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

Из 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'
});
person el_reverend    schedule 10.03.2014