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.