Just to add another use case of such methods... I recently wrote a delayed
mousemove special event that does similar functionality. I plan on
extracting the throttle/debounce functionality into its own plugin for
use-cases such as this ajax one.
--
Brandon Aaron

On Sat, Mar 28, 2009 at 1:53 AM, oliver <[email protected]> wrote:

>
> Quick passes:
>
> jQuery.delay = function(callback, delay) {
>        var timeout;
>        return function() {
>                clearTimeout(timeout);
>                timeout = setTimeout(callback, delay);
>        }
> }
>
> jQuery.throttle = function(callback, delay) {
>        var prev = new Date().getTime() - delay;
>        return function() {
>                var now = new Date().getTime();
>                if (now - prev > delay) {
>                        prev = now;
>                        callback.call();
>                 }
>        }
> }
>
>
> On Mar 27, 11:38 pm, oliver <[email protected]> wrote:
> > I agree that this is a common use case, and also that it would be
> > better implemented as an optional parameter to ajax rather than a
> > wholly separate method.
> >
> > I find I also use similar code within animations, so perhaps the code
> > could be implemented in such a way as to also be exposed as a utility
> > function.
> >
> > Perhaps: $.delay(function, delay) - returns a function handler which
> > can be called many times, but the registered function will only fire
> > once, [delay] milliseconds after the last time it was called.  The
> > innards of the function would be mostly as Miloš has above.
> >
> > A potentially useful corollary might be: $.throttle(function, delay) -
> > returns a function handler which could be called as many times as
> > desired, but the registered function would only fire every [delay]
> > millis at most.
> >
> > Names are just off the top of my head, of course.
> >
> > oliver
> >
> > On Mar 27, 3:27 pm, Daniel Friesen <[email protected]> wrote:
> >
> >
> >
> > > Rather than an entire other function, what about just a {delay: ms} to
> .ajax
> >
> > > ~Daniel Friesen (Dantman, Nadir-Seen-Fire)
> >
> > > Miloš Rašić wrote:
> > > > Here's a suggestion for a feature that I think would be useful to
> AJAX
> > > > developers. Sometimes, we need an AJAX feature that could allow a
> user
> > > > to cause a large number of consequent AJAX requests, for example in
> > > > auto-complete for searches (like Google Suggest) or filter forms that
> > > > submit whenever something is changed in them. In a case like this,
> > > > especially when the user has a slow internet connection, we have no
> > > > way of knowing if the AJAX responses will arrive in the same order as
> > > > the requests were sent. A solution to this is to wait for some time
> to
> > > > make sure that the user has stopped manipulating the controls that
> > > > cause AJAX requests before sending a request. At the moment, I do it
> > > > like this:
> >
> > > >    function submit_filter() {
> > > >            $('#item_list').html('loading...');
> > > >            $.post('some url',$('#filter').serialize(),function(data)
> {
> > > >                    $('#item_list').html(data);
> > > >            });
> > > >            return false;
> > > >    }
> >
> > > >    $('.ajax_control').change(function() {
> > > >            clearTimeout(ajaxTimeout);
> > > >            ajaxTimeout = setTimeout(submit_filter,2000);
> > > >    });
> >
> > > > Basically, whenever a control is changed a timeout for ajax request
> is
> > > > reset to 2 seconds. A request is sent only when a user changes
> > > > something an hasn't made new changes last 2 seconds.
> >
> > > > Since this is a frequent use case, it would be great if there would
> be
> > > > a $.post_delayed() function which would have additional 2 parameters:
> > > > an id, which would be used to identify related controls, and a time
> > > > interval to wait before submitting the request.
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/jquery-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to