Yes, very important to show immediate feedback so the user knows what's going on; shocking how often that isn't done. In many cases, just that alone is going to prevent the OP's scenario with the impatient user.
But unless it's unavoidable/inappropriate, I'm not a fan of that preventing other actions. The number of times I've clicked the wrong thing and been frustrated because I couldn't do what I wanted to do until the thing I didn't want to do finishes... So my take is: Offer immediate feedback, and if it's *appropriate* or necessary disable other actions but not if you can avoidit; offer a way of cancelling anything that will take any time (which is nearly anything), whether it's an explicit "cancel" widget or just initiating a different action. I can totally see some widget, perhaps something appropriate for scripteka, that could be general enough to handle this reusably. [Travis, with my pedantic hat on: Your "ParallelRequestManager" is actually a *serial* request manager (the requests are handled in series, not in parallel); your SerialRequestManager is more of a *single* request manager... ;-)] -- T.J. Crowder tj / crowder software / com On Jul 2, 5:52 am, "Ryan Gahl" <[EMAIL PROTECTED]> wrote: > Well, it does sound quite sensible, if not a bit heavy for your specific > problem (which, by the way is not rooted in the transport layer, but in the > UX layer... the user experience). The crux of your problem is that the user > is clicking something again. Why? Because he is unaware that anything is > going on from the first click (i.e. your request is taking longer than the > user expects and you give no indication that something is happening). The > most common pattern, which for all intents and purposes works and is far > less complicated to implement than the "request queue", is to implement a > "Loading..." shim that renders everything underneath it unclickable, and > goes away when the call returns. > > Now... if you're hellbent on implementing the "request queue"... let me know > and I'll offer up some suggestions (we have done something similar for other > issues). BUT, the answer I gave above is IMHO a more accurate solution if > you objectively look at the real issue. > > > > On Tue, Jul 1, 2008 at 7:18 PM, Travis Miller <[EMAIL PROTECTED]> wrote: > > > I'm looking for a good pattern that prevents AJAX requests from > > overlapping. > > > Consider this scenario, using an address book application as an example: > > > 1. On the left side of the page, there's a list of contacts. On the right > > side, there's a box that shows the currently selected contact. (Only one > > contact can be open at a time.) > > 2. The user clicks on a contact to open it. > > 3. The app initiates an AJAX request, but it takes a while. Maybe the > > server has to do some extra processing for some reason. > > 4. The user gets impatient, and clicks on another contact before the first > > one has loaded, which initiates a second, parallel AJAX request. > > 5. The second contact loads immediately, and the user starts working with > > it, but then... > > 6. ...the first AJAX request finally completes, and the first contact gets > > loaded over the second! > > > Obviously, the first AJAX request should be canceled if a second request of > > the same type is issued while it's still running. > > > Here's what I'm thinking: a generalized utility class - say, > > SerialRequestManager - designed to handle all situations of this type. Sort > > of a wrapper around Ajax.Request. A setRequest() method would accept an > > Ajax.Request object (and, if one is already set, destroys the existing one > > first); you'd probably want a cancelRequest() method, as well. The same > > class could hide and show an activity indicator. > > > To stray from the original problem a bit: a variant class - > > ParallelRequestManager - could add incoming requests to a queue, rather than > > destroying existing ones; it would show the activity indicator when the > > first request was added to the queue, and hide it when the last remaining > > request in the queue completes. > > > Does any of this sound sensible? :) > > -- > Ryan Gahl > Manager, Senior Software Engineer > Nth Penguin, LLChttp://www.nthpenguin.com > -- > WebWidgetry.com / MashupStudio.com > Future Home of the World's First Complete Web Platform > -- > Inquire: 1-920-574-2218 > Blog:http://www.someElement.com > LinkedIn Profile:http://www.linkedin.com/in/ryangahl --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Spinoffs" group. To post to this group, send email to rubyonrails-spinoffs@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/rubyonrails-spinoffs?hl=en -~----------~----~----~----~------~----~------~--~---