Thanks Scott...you have given me some food for thought.

On Nov 12, 9:18 am, Scott Sauyet <scott.sau...@gmail.com> wrote:
> >     function getData(url) {
> >         var storedData;
> >         return function(callback) {
> >             if (storedData) callback(storedData)
> >             else $.getJSON(url, function(data) {
> >                 storedData = data;
> >                 callback(storedData);
> >             });
> >         };
> >     };
>
> That has the disadvantage that is will make the AJAX call multiple
> times if multiple calls come in to the generated function before the
> first one completes.  This has the same API, but is cleaner:
>
>     function getData(url) {
>         var storedData, callbacks = [];
>         $.getJSON(url, function(data) {
>             storedData = data;
>             for (var i = 0; i < callbacks.length; i++) {
>                 callbacks[i](data);
>             }
>         });
>         return function(callback) {
>             if (storedData) callback(storedData)
>             else callbacks.push(callback);
>         };
>     };
>
> This could easily be extended for multiple re-tries on ajax failure.
>
> But any of these techniques turn what you would like to think of as
> synchronous calls into asynchronous ones.  A different technique
> avoids making you think about this, although it is equally
> asynchronous:  Simply move your click binding inside the
> initial .getJSON callback.  "data" will be available, and you won't
> have to make additional calls.  The biggest disadvantage of this is
> that the default action will happen on your links if they're clicked
> before the ajax call returns.
>
> Anyway, here's a few ideas.
>
>   -- Scott

Reply via email to