While this will "fix" the problem, it is bad practice to cause blocking in 
Javascript.  Particularly so in this case, since the
poster stated that the request takes a long time to fulfill.  Remember that 
Javascript is single-threaded.

I'm relatively new to serious Javascript programming, but every time I've made 
an Ajax request synchronous, I've ended up having to
change it.

My advice: spend the time to wrap your head around the Javascript execution 
model.  You'll be grateful later.

--
Jonathan Rosenberg
Founder & Executive Director, Tabby's Place
http://www.tabbysplace.org/


> -----Original Message-----
> From: [email protected] 
> [mailto:[email protected]] On
> Behalf Of eulerss
> Sent: Friday, January 23, 2009 10:22
> To: Prototype & script.aculo.us
> Subject: [Proto-Scripty] Re: Question from an almost ajax newbbie
> 
> 
> my problem was very similar, i only added the next line into my
> script:
> 
> asynchronous: false,
> 
> and it works fine
> 
> eulerss
> 
> On 23 ene, 08:12, "[email protected]" <[email protected]>
> wrote:
> > I get an hint that we are 'compaesani' :-P
> >
> > Anyhow.. thank you very much,I'm studying that link you gave me,
> > meanwhile, in my particular case setting to "syncronous" has indeed
> > resolved my issue.
> >
> > Thank you very much for you toughtfull response
> >
> > A presto
> >
> > David(e)
> >
> > On Jan 23, 2:08 pm, "T.J. Crowder" <[email protected]> wrote:
> >
> >
> >
> > > Ciao David,
> >
> > > By default, Ajax requests are asynchronous, and so they get *started*
> > > when you do "new Ajax.Requst" but then they run for a while and
> > > complete later; meanwhile, your code that started the request
> > > continues.  So what your anonymous function above returns will be
> > > whatever value risultato has when the function starts, since the
> > > request hasn't completed yet.  Later, at a time you cannot predict,
> > > the value of risultato will be updated by the callbacks you've
> > > registered.
> >
> > > You _can_ make requests synchronous if you like (set the asynchronous
> > > parameter to false), but that will lock up the UI of the browser for
> > > the entire time the request is taking pace -- which from what you've
> > > said about availability.php non sembra una buona idea.
> >
> > > This might be 
> > > useful:http://proto-scripty.wikidot.com/prototype:how-to-bulletproof-ajax-re...
> > > It's an example of an Ajax request that starts the process of
> > > retriving a record from the server, and then displays that record (or,
> > > of course, an error) on callback.
> >
> > > Basically, when working with lots of asynchronous stuff like this, you
> > > end up modifying your logic so you don't make a function call and
> > > expect an answer back, but instead you make a function call and expect
> > > to handle the result in callbacks.
> >
> > > HTH,
> > > --
> > > T.J. Crowder
> > > tj / crowder software / com
> > > Independent Software Engineer, consulting services available
> >
> > > On Jan 23, 12:38 pm, "[email protected]" <[email protected]>
> > > wrote:
> >
> > > > First of all I'm David, from Italy.
> > > > I recently started looking into your fabolous prototype thanks to this
> > > > script:http://tetlaw.id.au/view/javascript/really-easy-field-validation
> >
> > > > After some playing around I decided to add another validation check.
> > > > Without going into the details of the other script (which is not
> > > > relevent) I would like to ask you how can I return a variable AFTER an
> > > > Ajax request has finished.
> >
> > > > This is the code:
> >
> > > > function(v) {
> > > >                 new Ajax.Request('availability.php',
> > > >                 {method: 'get', parameters: {validate: v},
> > > >                 onSuccess: function( transport ) {
> > > >                      if( transport.responseText.match(/true/)) {
> > > >                         risultato = false;
> > > >                         }
> > > >                 else {
> > > >                 risultato = true;
> > > >                 }
> > > >                 }
> > > >                 });
> > > >                 return risultato;
> > > >                 }
> >
> > > > The problem is that availability takes a long time to process the
> > > > response (1sec) and while he process the thing risultato has the value
> > > > of the last query.
> >
> > > > For example: first time we have risultato = true;
> > > > so it returns: true
> > > > The second time I invoke the function i still have risultato = true
> > > > from before. Now the ajx request returns risultato = false BUT while
> > > > it goes the functions returns true.
> >
> > > > How can I avoid this?
> >
> > > > Thank you very much- Ocultar texto de la cita -
> >
> > - Mostrar texto de la cita -
> 


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Prototype & script.aculo.us" 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/prototype-scriptaculous?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to