views:

590

answers:

3

Is there anything special I have to do to a JSON object before I send it with AJAX? My code looks like this:

runAjax(JSON.stringify(data));

}

function runAjax(JSONstring)
{
    ajax = getHTTPObject();
    var params = "?data=" + JSONstring;
    ajax.open("POST", "createtrip.php", true);
    ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    ajax.setRequestHeader("Content-length", params.length);
    ajax.setRequestHeader("Connection", "close");
    ajax.onreadystatechange = serverSpeaks;
    ajax.send(params);
}

Right now the server is not receiving the data. I get null on the server side but the client side JSONString is set. Is there something I'm doing wrong?

A: 

You should pass through an encoder to send the data correctly. Of course you would first have to see that the variable "data" is well formed as "JSON".

lib to encode/decode

other link encode/decode

andres descalzo
+2  A: 

You are sending data over POST, you don't need the '?' character at the beginning of the params variable, also I recommend you to encode the JSONString to avoid problems.

Note that you are missing the var statement for the ajax variable, this is declaring it globally (window.ajax) and I think that you don't need it globally...

function runAjax(JSONstring) {
  var params = "data=" + encodeURIComponent(JSONstring), 
      ajax = getHTTPObject();

  ajax.open("POST", "createtrip.php", true);
  ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  ajax.setRequestHeader("Content-length", params.length);
  ajax.setRequestHeader("Connection", "close");
  ajax.onreadystatechange = serverSpeaks;
  ajax.send(params);
}
CMS
my var statement is at the beginning of the file as I use if for other things.
Dan
A: 

The server can deal with post body like name1=value&name2=value2.

If you are using PHP, you can receive the json string by:

$data = file_get_contents("php://input");
Stackless
But can it deal with "?data=value"?
seth
Did you try to monitor the HTTP traffic using firebug or wireshark? They can give you more information about this Ajax request.
Stackless