Frage

ich eine Web-Anwendung, in der es Zahl von Ajax-Komponenten sind, die sich erfrischen jedes so oft innerhalb einer Seite (es ist ein Armaturenbrett Sorten).

Jetzt will ich Funktionalität der Seite hinzuzufügen, so dass, wenn es keine Internet-Konnektivität, wird der aktuelle Inhalt der Seite nicht ändern und eine Meldung erscheint auf der Seite sagen, dass die Seite offline ist (zur Zeit, da diese verschiedene Geräte auf der Seite versuchen, sie zu erfrischen und finden, dass es keine Verbindung ist, ihre alten Daten verschwinden).

Also, was ist der beste Weg, um dies zu realisieren?

War es hilfreich?

Lösung

Eine Möglichkeit, dies zu handhaben könnte sein, das XMLHttpRequest-Objekt mit einer expliziten Timeout Methode zu erweitern, dann verwenden, um festzustellen, ob Sie im Offline-Modus arbeiten (das heißt, für Browser, die Unterstützung navigator.onLine nicht). Hier ist, wie ich implementiert Ajax auf einer Website Timeouts (eine Website, die verwendet die Prototype Bibliothek). Nach 10 Sekunden (10.000 Millisekunden), bricht er den Anruf entgegen und ruft die onFailure Methode.

/**
 * Monitor AJAX requests for timeouts
 * Based on the script here: http://codejanitor.com/wp/2006/03/23/ajax-timeouts-with-prototype/
 *
 * Usage: If an AJAX call takes more than the designated amount of time to return, we call the onFailure
 *        method (if it exists), passing an error code to the function.
 *
 */

var xhr = {
    errorCode: 'timeout',
    callInProgress: function (xmlhttp) {
        switch (xmlhttp.readyState) {
            case 1: case 2: case 3:
                return true;
            // Case 4 and 0
            default:
                return false;
        }
    }
};

// Register global responders that will occur on all AJAX requests
Ajax.Responders.register({
    onCreate: function (request) {
        request.timeoutId = window.setTimeout(function () {
            // If we have hit the timeout and the AJAX request is active, abort it and let the user know
            if (xhr.callInProgress(request.transport)) {
                var parameters = request.options.parameters;
                request.transport.abort();
                // Run the onFailure method if we set one up when creating the AJAX object
                if (request.options.onFailure) {
                    request.options.onFailure(request.transport, xhr.errorCode, parameters);
                }
            }
        },
        // 10 seconds
        10000);
    },
    onComplete: function (request) {
        // Clear the timeout, the request completed ok
        window.clearTimeout(request.timeoutId);
    }
});

Andere Tipps

navigator.onLine

Das sollte tun, was Sie fragen.

Sie wollen wahrscheinlich, dass lesen, was auch immer Code, den Sie haben, dass die Seite aktualisiert. Zum Beispiel:

if (navigator.onLine) {
    updatePage();
} else {
    displayOfflineWarning();
}

Es scheint, wie Sie Ihre eigene Frage beantwortet haben. Wenn die Geräte eine asynch Anfrage und senden Sie es mal aus, aktualisiere sie nicht. Wenn Sie genug von ihnen so tun, zeigen die „Seite ist offline“ angezeigt.

Siehe die HTML-5-Entwurfsspezifikation . Sie wollen navigator.onLine. Nicht alle Browser unterstützen es noch nicht. Firefox 3 und Opera 9.5 tun.

Es klingt, als ob Sie versuchen, das Problem zu vertuschen, anstatt sie zu lösen. Wenn eine ausgefallene Anfrage Ihre Widgets verursacht ihre Daten zu löschen, dann sollten Sie Ihren Code zu beheben, so dass es nicht Ihre Widgets aktualisieren nicht versuchen, wenn er eine Antwort erhält, anstatt zu versuchen, um herauszufinden, ob die Anforderung vor der Zeit gelingen wird.

Hmm, eigentlich jetzt sehe ich in sie ein bisschen, es ist ein bisschen komplizierter ist als das. Haben Sie einen Lese dieser Links auf John Resig Blog und der Mozilla-Website . Das obige Poster kann auch einen guten Punkt hat -. Sie Anfragen machen sowieso, so sollten Sie in der Lage sein zu arbeiten, wenn sie scheitern .. Das könnte ein sehr viel zuverlässigen Weg zu gehen

Machen Sie einen Anruf zu einem zuverlässigen Ziel, oder vielleicht eine Reihe von Anrufen, diejenigen, die durch zu gehen und zurück, wenn der Benutzer eine aktive Netzverbindung hat - sogar etwas so einfach wie ein Token-Ping an Google, Yahoo und MSN, oder etwas ähnliches. Wenn mindestens eine Rück grün kommt, wissen Sie, dass Sie mit Freunden sind.

Ich denke, Google Gears eine solche Funktionalität haben, vielleicht könnten Sie überprüfen, wie sie das gemacht hat.

Verwenden Sie die entsprechenden HTML5-API: Online / Offline Status / Veranstaltungen .

Eine mögliche Lösung besteht darin, dass, wenn die Seite und die Cache-Seite eine andere URL nur schauen und sehen, welche URL Sie sind. Wenn Sie auf die URL der Cache-Seite sind, dann sind Sie im Offline-Modus. Dieses Blog macht einen guten Punkt, warum navigator.online ist pleite

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top