Just be aware that doing the ajax call synchronously will block (lock
up) the browser until the request/response completes.  This is
typically okay when running locally, but can be very noticeable when
running on slower connections (e.g. shared hosting).  There's no
reason why you cannot do this asynchronously.  You just need to handle
the dom updating inside (or in a sub-function of) the success handler
function.

On Aug 20, 1:13 pm, dkomo872 <dkomo...@comcast.net> wrote:
> On Aug 20, 6:59 am, MorningZ <morni...@gmail.com> wrote:
>
>
>
> > "Does anyone know what is wrong?  I've never seen an ordinary function
> > behave this way. "
>
> > That's because $.post (and the resultant $.ajax) isn't "ordinary",
> > it's an asynchronous call and when you hit the line
>
> >  jsonData = eval('(' + data + ')');
>
> > the script isn't back from the post call yet....
>
> > you need to learn about callbacks to better your code to take full
> > advantage of async behavior
>
> > another tip, if you are doing a post and looking to get back JSON,
> > then use something like:
>
> > var Options = {
> >     type = "POST",
> >     url = "save_search.php",
> >     processData = true,
> >     data = formData,
> >     dataType = "json",
> >     success = SaveSearch_Success,
> >     error = SaveSearch_Error};
>
> > $.ajax(Options);
>
> > and outside all that, here are your functions "outside" the ajax call
>
> > function SaveSearch_Success(data) {
> >    // data = your result in JSON already};
>
> > function SaveSearch_Error(x,y,z) {
> >    // x.responseText will have server side error message
>
> > };
>
> Ok, I finally got $.ajax(Options) to work, but only after some
> difficulties.  First of all, your Options above needs to look like
> this (it's an object):
>
> var Options = {
>     type : "POST",
>     url : "save_search.php",
>     processData : true,
>     data : formData,
>     dataType : "json",
>     success : SaveSearch_Success,
>     error : SaveSearch_Error
>     };
>
> Secondly, this still produces an asynchronous call to
> SaveSearch_Success, so I still hit my original probelm with data1
> being undefined because Javascript rushes ahead without waiting for
> the Ajax request to complete.  Only when I added the following option
> to Options:
>
> async: false
>
> did I finally get good data in data1 outside of SaveSearch_Success.
> The above option produces a *synchronous*  Ajax request where
> Javascript waits until the request is complete.  That's okay with me
> because the request to save_search.php is very fast anyway.
>
> Finally, this code snippet results in no arguments being sent to
> save_search.php:
>
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> var formData;
>
> var Options = {
>     type : "POST",
>     url : "saved_search.php",
>     processData : true,
>     data : formData,
>     dataType : "json",
>     success : SaveSearch_Success,
>     error : SaveSearch_Error,
>     async: false
>     };
>
> formData = $('#form1').serialize();
> $.ajax(Options);
>
> +++++++++++++++++++++++++++++++++++++++++++++++++++++
>
> You have to define the Options object *after* putting the arguments
> into formData like this:
>
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>
> var formData = $('#form1').serialize();
>
> var Options = {
>     type : "POST",
>     url : "saved_search.php",
>     processData : true,
>     data : formData,
>     dataType : "json",
>     success : SaveSearch_Success,
>     error : SaveSearch_Error,
>     async: false
>     };
>
> $.ajax(Options);
>
> +++++++++++++++++++++++++++++++++++++++++++++++++++++
>
> Javascript is just *so* cool!  But thanks for your help.  I can
> continue on and get something productive done now.

Reply via email to