Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ajax] onclick i seria przyciśnięć
miccom
post 27.01.2018, 11:06:14
Post #1





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

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


Cześć.
Pytanko mam, jak rozwiązać sprawę kilkukrotnego kliknięcia elementu i wykonania tych samych zadań.

Poniższe zadanie realizuje pewną opcję.
Jeśli moje łącze z internetem jest dobre to śmiga, ale jeśli net szwankuje to mogę kliknąć kilka razy ten element za nim pierwsze zadanie się wykona i wyświetli.

  1. $('body').on('click', '.mojDiv', function() {
  2. $.ajax({
  3. type : "GET",
  4. dataType : "json",
  5. url : "kadra",
  6. }).done(function( data ) {
  7. if (data.error)
  8. {
  9. alert(data.error);
  10. }
  11. else
  12. {
  13. showActiveWindow( data.daneDoWyswietlenia, '640px', '506px',100);
  14. }
  15. });
  16. });


Jak zatrzymać wykonanie się kodu ajax do czasu wyświetlenia okna informacyjnego ( showActiveWindow ) ?
Będę wdzięczny za pomoc.


--------------------
Jeśli pomogłem- kliknij POMÓGŁ-przyda się ;)- jeśli piszę bzdury- pisz pod postami. Poprawię się.
PISZĘ POPRAWNIE PO POLSKU!
Go to the top of the page
+Quote Post
viking
post 27.01.2018, 11:48:44
Post #2





Grupa: Zarejestrowani
Postów: 4 748
Pomógł: 795
Dołączył: 30.08.2006

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


Błąd połączenia to metoda fail().


--------------------
Go to the top of the page
+Quote Post
miccom
post 27.01.2018, 11:51:37
Post #3





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

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


Cytat(viking @ 27.01.2018, 11:48:44 ) *
Błąd połączenia to metoda fail().


Dziękuję za informację, ale mimo tego nadal można kliknąć kilka razy wink.gif i wykonać to samo zadanie kilka razy.


--------------------
Jeśli pomogłem- kliknij POMÓGŁ-przyda się ;)- jeśli piszę bzdury- pisz pod postami. Poprawię się.
PISZĘ POPRAWNIE PO POLSKU!
Go to the top of the page
+Quote Post
viking
post 27.01.2018, 12:08:00
Post #4





Grupa: Zarejestrowani
Postów: 4 748
Pomógł: 795
Dołączył: 30.08.2006

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


A dlaczego miało by się nie wykonywać? Dopóki nie zdejmiesz listenera off() zdarzenie występuje na elemencie.


--------------------
Go to the top of the page
+Quote Post
miccom
post 27.01.2018, 12:30:54
Post #5





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

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


Czy mogę zastosować coś takiego?


  1. $('body').on('click', '.mojDiv', function() {
  2. $( ".mojDiv" ).off( "click");




--------------------
Jeśli pomogłem- kliknij POMÓGŁ-przyda się ;)- jeśli piszę bzdury- pisz pod postami. Poprawię się.
PISZĘ POPRAWNIE PO POLSKU!
Go to the top of the page
+Quote Post
sabat24
post 27.01.2018, 12:53:16
Post #6





Grupa: Zarejestrowani
Postów: 147
Pomógł: 24
Dołączył: 13.09.2007

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


Raczej coś takiego:

  1. $('body').on('click', '.mojDiv', function(e) {
  2. var that = $(this);
  3. if (that.data('inprogress') || 0) == 1) { return false;}


Następnie dodaj
  1. .complete(function() {
  2. that.data('inprogress', 0);
  3. });

oraz
  1. .beforeSend(function() {
  2. that.data('inprogress', 1);
  3. });
  4.  


Ten post edytował sabat24 27.01.2018, 12:54:00
Go to the top of the page
+Quote Post
miccom
post 27.01.2018, 15:08:47
Post #7





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

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


Więc składając kod do kupy tak to ma wyglądać?

  1. $('body').on('click', '.mojDiv', function(e) {
  2. var that = $(this);
  3. if (that.data('inprogress') || 0 == 1) { return false;}
  4. $.ajax({
  5. type : "GET",
  6. dataType : "json",
  7. url : "kadra",
  8. beforeSend: function() {
  9. that.data('inprogress', 1);
  10. },
  11. .done(function( data ) {
  12. that.data('inprogress', 0);
  13. if (data.error)
  14. {
  15. alert(data.error);
  16. }
  17. else
  18. {
  19. showActiveWindow( data.daneDoWyswietlenia, '640px', '506px',100);
  20. }
  21. });
  22. });
  23. });



Nie chcę mędrkować ale czy to jest poprawnie napisane?
Nawiasy się nie zgadzają
  1. if (that.data('inprogress') || 0) == 1) { return false;}


--------------------
Jeśli pomogłem- kliknij POMÓGŁ-przyda się ;)- jeśli piszę bzdury- pisz pod postami. Poprawię się.
PISZĘ POPRAWNIE PO POLSKU!
Go to the top of the page
+Quote Post
sabat24
post 27.01.2018, 15:48:59
Post #8





Grupa: Zarejestrowani
Postów: 147
Pomógł: 24
Dołączył: 13.09.2007

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


Cytat
Nie chcę mędrkować ale czy to jest poprawnie napisane?
Nawiasy się nie zgadzają

Pisałem to z ręki. Zobacz tak:

  1. if ((that.data('inprogress') || 0) == 1) { return false;}


Co do tego fragmentu:
  1. that.data('inprogress', 0);


Musisz zarówno to obsługiwać w przypadku done oraz fail - bo jeśli otrzymasz błąd, to nie będziesz mógł znowu kliknąć, bo status się nie zresetuje.

Możesz więc to skopiować i dodać w done oraz fail albo dodać osobny status complete (albo always - nie pamiętam teraz, jak to się zwało), żeby było wykonywane za każdym razem, gdy request się wykona.
Go to the top of the page
+Quote Post
miccom
post 27.01.2018, 16:03:24
Post #9





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

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


Ok, więc tak to skleciłem:

  1. $('body').on('click', '.mojDiv', function(e) {
  2. var that = $(this);
  3. if ((that.data('inprogress') || 0) == 1) { return false;}
  4. $.ajax({
  5. type : "GET",
  6. dataType : "json",
  7. url : "kadra",
  8. beforeSend: function() {
  9. that.data('inprogress', 1);
  10. },
  11.  
  12. }).done(function( data ) {
  13. that.data('inprogress', 0);
  14. if (data.error)
  15. {
  16. alert(data.error);
  17. }
  18. else
  19. {
  20. showActiveWindow( data.daneDoWyswietlenia, '640px', '506px',100);
  21. }
  22. }).fail(function (data) {
  23. that.data('inprogress', 0);
  24. alert(data.error);
  25. });
  26. });


Sprawdzisz czy dobrze ? smile.gif


Ten post edytował miccom 27.01.2018, 16:13:02


--------------------
Jeśli pomogłem- kliknij POMÓGŁ-przyda się ;)- jeśli piszę bzdury- pisz pod postami. Poprawię się.
PISZĘ POPRAWNIE PO POLSKU!
Go to the top of the page
+Quote Post
sabat24
post 28.01.2018, 11:57:05
Post #10





Grupa: Zarejestrowani
Postów: 147
Pomógł: 24
Dołączył: 13.09.2007

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


Na oko wygląda ok. Aczkolwiek dość łatwo będzie Ci to sprawdzić w praktyce, bo wystarczy, że zobaczysz w przeglądarce, czy po 2 kliknięciach nie zrobi Ci 2 requestów.
Co do fail to konstrukcja jest taka:

  1. .ajax().fail(function(jqXHR, textStatus, errorThrown){});


Nie masz data, bo nie masz odpowiedzi z serwera, gdyż był błąd. Żeby wyświetlić co się stało, zrób
  1. .fail(function(jqXHR, textStatus, errorThrown) {
  2. that.data('inprogress', 0);
  3. alert(textStatus);
  4. });


Ten post edytował sabat24 28.01.2018, 11:57:41
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 Wersja Lo-Fi Aktualny czas: 21.02.2018 - 10:20