2012-06-04 19 views
11

Tengo una aplicación HTML5 que utiliza un manifiesto de caché para proporcionar funcionalidad sin conexión. Esta aplicación realiza llamadas ajax, cuando está en línea, y algunas de estas llamadas pueden obtener un 403 no autorizado en respuesta.manifiesto de caché HTML5: llamadas ajax infructuosas que reciben repliegue

Aquí está la parte inferior de mi archivo cache.manifest:

NETWORK: 
* 

FALLBACK: 
//offline 

Si quito la sección de reserva, todas las llamadas que reciben una obra ajax respuesta 403 como se esperaba y que pueden detectar esto con gestor de errores jQuery y redirigir el usuario al formulario de inicio de sesión.

Pero si la sección de reserva está presente, las mismas llamadas obtienen una respuesta 200 OK, con contenido de HTML alternativo como cuerpo, aunque el servidor respondió con 403, así que no hay manera de saber que el usuario no está autenticado y debe ser enviado a la página de inicio de sesión.

¿Falta algo aquí? Gracias de antemano

+0

¿Te refieres a la ¿Fallback se ejecuta incluso cuando el usuario está en línea y el archivo realmente no existe? – Ekim

+0

Sí, está esperando que el indicador de comodín en línea ('*') anule lo que ingresó en el respaldo. Pero funciona al revés, según [la especificación] (http://www.w3.org/TR/2011/WD-html5-20110525/offline.html#parsing-cache-manifests) –

Respuesta

2

Agregar un número aleatorio como parámetro de consulta a la página que está buscando para jQuery-AJAX resolverá el problema; es decir

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

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

Aquí es una referencia que los errores pueden ocurrir debido a la presentación de informes del código de estado como 0, lo que se interpreta como un fracaso:

$.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' 
}); 
Cuestiones relacionadas