2012-06-04 11 views
11

Ich habe eine HTML5-Anwendung, die ein Cache-Manifest verwendet, um Offline-Funktionalität bereitzustellen. Diese Anwendung ruft Ajax-Anrufe auf, wenn sie online sind, und einige dieser Anrufe können eine Antwort 403 erhalten, die nicht autorisiert ist.HTML5-Cache-Manifest: Erfolglose Ajax-Aufrufe bekommen Fallback

Hier ist der Grund meiner cache.manifest Datei:

NETWORK: 
* 

FALLBACK: 
//offline 

Wenn ich den Ausweichabschnitt alle Ajax-Aufrufe Aufnahme einer 403 Antwort Arbeit zu entfernen, wie erwartet, und ich kann diese Prozedur mit jQuery Fehler erkennen und umleiten der Benutzer zum Login-Formular.

Aber wenn Fallback-Abschnitt vorhanden ist, erhalten die gleichen Aufrufe eine 200 OK-Antwort, mit Fallback HTML-Inhalt als Körper, obwohl der Server mit einem 403 antwortete, so gibt es keine Möglichkeit für mich zu wissen, der Benutzer nicht authentifiziert und muss auf die Anmeldeseite gesendet werden.

Fehle ich hier etwas? Vielen Dank im Voraus

+0

Haben Sie die mittlere Fallback wird ausgeführt, auch wenn der Benutzer online ist und die Datei wirklich nicht existiert? – Ekim

+0

Ja, Sie erwarten, dass das Online-Wildcard-Flag ('*') überschreibt, was Sie im Fallback eingegeben haben. Aber es funktioniert umgekehrt, nach [der Spezifikation] (http://www.w3.org/TR/2011/WD-html5-20110525/offline.html#parsing-cache-manifests) –

Antwort

2

Das Hinzufügen einer Zufallszahl als Abfrageparameter zu der Seite, die Sie für die jQuery-AJAX suchen, wird das Problem lösen;

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

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

Dies ist ein Hinweis, dass Fehler wegen der Berichterstattung über den Statuscode als 0 auftreten kann, das als Versagen interpretiert wird:

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