2009-09-04 2 views
5

So implementieren Sie ein Google Mail-wie "das dauert zu lange" warning message mit jQuery Ajax API?Implementieren "das dauert zu lange" Nachricht mit jQuery

Für diejenigen, die diese Nachricht noch nie in Google Mail gesehen haben, erscheint sie, wenn der Anmeldevorgang zu lange dauert und einige Lösungen vorgeschlagen werden.

Ich benutze jQuery Ajax auf meiner Website und ich möchte Benutzer warnen, wenn das Laden der Seite sehr langsam ist und dann einige Lösungen vorschlagen (ein Link zum Aktualisieren der Seite, oder zu einer Hilfeseite, zum Beispiel).

Antwort

14

würde ich etwas so einfaches wie diese Anordnung vorschlagen:

function tooLong() { 
    // What should we do when something's taking too long? Perhaps show a `<div>` with some instructions? 
    $("#this-is-taking-too-long").show(); 
} 

// Then, when you're about to perform an action: 
function performSomeAction() { 
    var timer = setTimeout(tooLong, 10000); 
    $.get('/foo/bar.php', {}, function() { 
     // Success! 
     clearTimeout(timer); 
    }); 
} 
+0

Das Argument sollte clear der Rückgabewert von setTimeout (der Timer Griff), nicht die Methode aufgerufen werden, wenn der Timer abläuft. – tvanfosson

+0

Eigentlich erwartet 'clearTimeout' eine Timeout-ID, nicht das Funktionsobjekt, wie Sie es hier haben. – kangax

+0

Ich habe die Logik und die Timeout-Anordnung verstanden, aber wie funktioniert die setTimeout-Funktion und in welchen Fällen ist sie anwendbar? Ich konnte es nicht in der jQuery-Dokumentation finden. – fjsj

2

Warum nicht einfach die eingebaute in jQuery ajax 'timeout' option verwenden. Es ist eine gute Übung, es trotzdem zu verwenden, falls Sie Probleme mit Ihrem Ajax-Anruf haben. Oder du könntest das Rad neu erfinden;)

edit: und, ähm, ich denke du würdest das mit einer Fehlerfunktion koppeln wollen.

+1

+1, wenn Sie bereits die $ .ajax-Methode verwenden, die einen Fehlerrückruf ermöglicht. Wenn Sie sonst get/load/post verwenden und nur die Nachricht zu lang dauern möchten, dann wäre die Verwendung von set/clearTimeout akzeptabel. – tvanfosson

+0

Sie können auch die $ .ajaxSetup-Methode verwenden - das betrifft alle Ajax-Aufrufe. – jonstjohn

+1

Bedenken Sie, dass der Zeitüberschreitungsfehler innerhalb von $ .ajax tatsächlich aufhört, nach einer Antwort vom Server zu suchen, als Ergebnis wäre es "dies konnte nicht verarbeitet werden" im Gegensatz zu dem, was das OP wollte, was "das ist zu lang". – jakeisonline