Autor | Zpráva | ||
---|---|---|---|
PetrBK Profil |
#1 · Zasláno: 24. 6. 2020, 17:23:20
Zdravím,
používám UI sliders (jqueryui.com/slider/#default) při vyhledávání a pro efekt vypisuji AJAXem počet nalezených hodnot v DB. Jeden můj slider má 200 pozic a pokud uživatel přejede celý slider, vyvolá to 200 dotazů na DB. Zkoušel jsem tam dát delay, ale to jen opozdí volání, ale nepřeskočí hodnoty. Lze to omezit, tak aby AJAX nějaké hodnoty neodesílal? Díky moc P. // Initializing DEPOSIT slider $( "#slider_deposit" ).slider({ range: "min", value: 1000, step: 100, min: 0, max: 20000, slide: function( event, ui ) { // Get value if(ui.value == 0){ui.value = 1;} $('#slider_deposit_inp').attr('value', ui.value); $('#slider_deposit_pre').html('£' + numberWithCommas(ui.value)); // AJAX request var delay = 250; $.ajax({ type: 'get', url: 'js/uislider/ajax.php', data: { inp_deposit: ui.value }, success: function(data) { setTimeout(function() { $('#quick_view').html(data); }, delay); } }); } }); |
||
Keeehi Profil |
#2 · Zasláno: 24. 6. 2020, 17:30:56
timeout musíš dát kolem celého $.ajax
Něco jako: clearTimeout(timer); timer=setTimeout(function(){ $.ajax( .... Samozřejmě proměnná timer musí být zachována mezi jednotlivými běhy slide event funkcí. Takhle jak jsem to napsal by to fungovalo, ale byla by to globální proměnná. Jde to samozřejmě ale udělat i lépe. |
||
PetrBK Profil |
#3 · Zasláno: 24. 6. 2020, 18:41:02
Keeehi:
Díky moc, velmi mi to pomohlo. JS používám okrajově a clearTimeout(); mě nenapadlo použít.
|
||
N71 Profil * |
#4 · Zasláno: 24. 6. 2020, 23:04:10
Ta technika se obecně označuje jako "debounce". Najdeš spoustu hotových jQuery modulů, npm balíků a tak dále, které ti to pomůžou zjednodušit.
|
||
Časová prodleva: 4 roky
|
0