Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [jquery][ajax] beforeSend i loader
miccom
post
Post #1





Grupa: Zarejestrowani
Postów: 493
Pomógł: 8
Dołączył: 7.07.2007
Skąd: Tychy

Ostrzeżenie: (0%)
-----


Cześć (IMG:style_emoticons/default/smile.gif)

Jak rozwiązać problem .beforeSend i loadera?

W czym problem?

Po kliknięciu w dany element wysyłam zapytanie do bazy danych, zanim dane zostaną zwrócone ( np. przy słabszym łączu internetowym lub długim ładowaniu zawartości ) chcę pokazać obrazek który informuje że dane są pobierane itp. )

I przy .beforeSend ładuję do jednego div klasę loading a po załadowaniu .done usuwam ta klasę.
Działa fajnie, ale:

Jeśli moje łącze jest szybkie to przez ułamek sekundy widze obrazek i on potem znika ( zgodnie z założeniem ) ale czy da się uruchomić ten obrazek np. przy dłuższym ładowaniu niż 0.5 sek. aby przy szybkich łączach obrazek w ogóle się nie pokazywał?

Poniżej przedstawiam fragment kodu ajax

  1. $('body').on('click', '.face', function() {
  2. var that = $(this);
  3. if ((that.data('inprogress') || 0) == 1) { return false;}
  4. $.ajax({
  5. type : "GET",
  6. url : "pobierzDane/"+$(this).attr('id').split('face')[1],
  7. dataType : "json",
  8. beforeSend: function() {
  9. that.data('inprogress', 1);
  10. $("#loader").addClass("loading");
  11. },
  12. }).done(function( data ) {
  13. that.data('inprogress', 0);
  14. $("#loader").removeClass("loading");
  15. showActiveWindow(data.tytul, data.opis, 500, 530,100);
  16. }).fail(function(jqXHR, textStatus, errorThrown) {
  17. that.data('inprogress', 0);
  18. $("#loader").removeClass("loading");
  19. alert(textStatus);
  20. });
  21. });
  22.  


Ten post edytował miccom 18.08.2018, 17:44:00
Go to the top of the page
+Quote Post
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


A skąd wiadomo jaki będzie czas ładowania? Raczej tego się nie dowiesz.
Go to the top of the page
+Quote Post
miccom
post
Post #3





Grupa: Zarejestrowani
Postów: 493
Pomógł: 8
Dołączył: 7.07.2007
Skąd: Tychy

Ostrzeżenie: (0%)
-----


No tak... Stąd pytam (IMG:style_emoticons/default/smile.gif)

Myślałem, że w beforeSend ustawię setTimeout ale to działa tak, że mimo że wszystko się załaduje to i tak pokaże się obrazek (IMG:style_emoticons/default/smile.gif) Więc kiszka

Teraz mnie naszło (IMG:style_emoticons/default/smile.gif)
Zamiast dawać diva i bawić się z klasami wystarczy dać:

  1. $('body').css('cursor', 'progress');


Co nie rzuca się w oczy, a użytkownik będzie widział na kursorze ze klikniecie przyniosło efekt (IMG:style_emoticons/default/smile.gif)
A po załadownaiu zawartosci wrzucamy:

  1. $('body').css('cursor', 'auto');

Będzie dobrze?

Ten post edytował miccom 18.08.2018, 17:47:45
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Jeśli żądanie będzie trwało krótko, np. 0.5s, to będzie widocznie mignięcie kursora. Będzie dobrze?
Go to the top of the page
+Quote Post
miccom
post
Post #5





Grupa: Zarejestrowani
Postów: 493
Pomógł: 8
Dołączył: 7.07.2007
Skąd: Tychy

Ostrzeżenie: (0%)
-----


No myślę że tak:), pytam czy z programistycznego punktu będzie dobrze?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 06:56