2009-09-04 12 views
5

Jak zaimplementować adres Gmaila "trwa zbyt długo" warning message przy użyciu adresu jQuery Ajax API?Wdrażanie komunikatu "to trwa za długo" z jQuery

Dla tych, którzy nigdy nie widzieli tej wiadomości w Gmailu, pojawia się, gdy proces "podpisywania" trwa zbyt długo, a następnie sugerowane są niektóre rozwiązania.

Używam jQuery Ajax na mojej stronie i chcę ostrzec użytkowników, gdy ładowanie strony jest bardzo powolne, a następnie zasugerować kilka rozwiązań (link do odświeżenia strony lub na stronie pomocy, na przykład).

Odpowiedz

14

sugeruję coś tak prostego jak tego układu:

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

Argument clearTimeout powinna być wartość zwracana z setTimeout (rączki timer), nie sposób się powoływać po upływie tego czasu. – tvanfosson

+0

W rzeczywistości 'clearTimeout' oczekuje identyfikatora limitu czasu, a nie obiektu funkcji, jaki masz tutaj. – kangax

+0

Rozumiem logikę i ustawienie limitu czasu, ale jak działa funkcja setTimeout iw jakich przypadkach ma ona zastosowanie? Nie mogłem go znaleźć w dokumentacji jQuery. – fjsj

2

Dlaczego nie wystarczy użyć wbudowanej jQuery ajax 'timeout' option. Dobrą praktyką jest używanie go w każdym razie, na wypadek problemów z wywołaniem ajax. Lub, możesz ponownie wymyślić koło;)

edytuj: i, er, myślę, że chciałbyś połączyć to z funkcją błędu.

+1

+1, jeśli używasz już metody $ .ajax, która umożliwia wywołanie błędu. Jeśli w innym przypadku używałbyś polecenia get/load/post i chciałbyś, aby trwało to zbyt długo, użycie polecenia set/clearTimeout byłoby dopuszczalne. – tvanfosson

+0

Można również użyć metody $ .ajaxSetup - która wpłynie na wszystkie wywołania ajax. – jonstjohn

+1

Należy pamiętać, że błąd przekroczenia limitu czasu w $ .ajax faktycznie przestanie szukać odpowiedzi z serwera, w wyniku czego będzie "nie można go przetworzyć" w przeciwieństwie do tego, co chciał OP, co oznacza "to jest za długo". – jakeisonline

Powiązane problemy