2012-06-04 11 views
11

Ho un'applicazione HTML5 che utilizza un manifest di cache per fornire funzionalità offline. Questa applicazione effettua chiamate ajax, quando online, e alcune di queste chiamate possono ottenere una risposta 403 non autorizzata.manifest HTML5: chiamate ajax non riuscite che ottengono fallback

Ecco il fondo del mio file cache.manifest:

NETWORK: 
* 

FALLBACK: 
//offline 

Se rimuovo la sezione di ripiego, tutte le chiamate Ajax che ricevono un lavoro 403 risposta come previsto e io in grado di rilevare questo con gestore errori jQuery e reindirizzare l'utente al modulo di accesso.

Ma se la sezione di fallback è presente, le stesse chiamate ottengono una risposta di 200 OK, con il contenuto HTML di fallback come corpo, anche se il server ha risposto con un 403, quindi non c'è modo per me di sapere che l'utente non è autenticato e deve essere inviato alla pagina di accesso.

Mi manca qualcosa qui? Grazie in anticipo

+0

vuoi dire la fallback viene eseguito anche quando l'utente è online e il file non esiste realmente? – Ekim

+0

Sì, ci si aspetta che il flag di caratteri jolly online ('*') sostituisca quello inserito nel fallback. Ma funziona in senso inverso, secondo [le specifiche] (http://www.w3.org/TR/2011/WD-html5-20110525/offline.html#parsing-cache-manifests) –

risposta

2

L'aggiunta di un numero casuale come parametro di query alla pagina che stai cercando su jQuery-AJAX risolverà il problema; cioè

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

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

Ecco un punto di riferimento che gli errori possono verificarsi a causa della segnalazione del codice di stato come 0, che viene interpretato come un fallimento:

$.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' 
}); 
Problemi correlati