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.
$('body').on('click', '.mojDiv', function() { $.ajax({ type : "GET", dataType : "json", url : "kadra", }).done(function( data ) { if (data.error) { alert(data.error); } else { showActiveWindow( data.daneDoWyswietlenia, '640px', '506px',100); } }); });
Błąd połączenia to metoda fail().
A dlaczego miało by się nie wykonywać? Dopóki nie zdejmiesz listenera off() zdarzenie występuje na elemencie.
Czy mogę zastosować coś takiego?
$('body').on('click', '.mojDiv', function() { $( ".mojDiv" ).off( "click");
Raczej coś takiego:
$('body').on('click', '.mojDiv', function(e) { var that = $(this); if (that.data('inprogress') || 0) == 1) { return false;}
.complete(function() { that.data('inprogress', 0); });
.beforeSend(function() { that.data('inprogress', 1); });
Więc składając kod do kupy tak to ma wyglądać?
$('body').on('click', '.mojDiv', function(e) { var that = $(this); if (that.data('inprogress') || 0 == 1) { return false;} $.ajax({ type : "GET", dataType : "json", url : "kadra", beforeSend: function() { that.data('inprogress', 1); }, .done(function( data ) { that.data('inprogress', 0); if (data.error) { alert(data.error); } else { showActiveWindow( data.daneDoWyswietlenia, '640px', '506px',100); } }); }); });
if (that.data('inprogress') || 0) == 1) { return false;}
if ((that.data('inprogress') || 0) == 1) { return false;}
that.data('inprogress', 0);
Ok, więc tak to skleciłem:
$('body').on('click', '.mojDiv', function(e) { var that = $(this); if ((that.data('inprogress') || 0) == 1) { return false;} $.ajax({ type : "GET", dataType : "json", url : "kadra", beforeSend: function() { that.data('inprogress', 1); }, }).done(function( data ) { that.data('inprogress', 0); if (data.error) { alert(data.error); } else { showActiveWindow( data.daneDoWyswietlenia, '640px', '506px',100); } }).fail(function (data) { that.data('inprogress', 0); alert(data.error); }); });
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:
.ajax().fail(function(jqXHR, textStatus, errorThrown){});
.fail(function(jqXHR, textStatus, errorThrown) { that.data('inprogress', 0); alert(textStatus); });
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)