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