Autor Zpráva
PetrBK
Profil
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
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
Keeehi:
Díky moc, velmi mi to pomohlo. JS používám okrajově a clearTimeout(); mě nenapadlo použít.
N71
Profil *
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.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0