I\'ve googled for a while now and can only find what processData: false
does. I can\'t find anyone who has experienced this same issue.
I\'m passing JSO
Actually, processData
by default assumes that data
passed is an object and sends it as application/x-www-form-urlencoded
.
Summing up everything said above by @lonesomeday and @vsm to send raw JSON (what is different from the form data) you need to:
$.ajax({
url: 'http://here-i.am/send-me/an/angel', // Determining far end
data: JSON.stringify({foo: "bar"}), // Obtaining proper JSON string from data object
processData: false, // Preventing default data parse behavior
contentType: "application/json" // Setting proper `ContentType` for our data
...
});
You want to pass the data as JSON. You are passing a Javascript object. JSON is a way of serializing Javascript objects to strings so that they can be passed around without compatibility issues.
You actually want to pass the JSON in a string:
$.ajax({
url: myUrl,
type: "POST",
data: '{"foo": "bar"}',
processData: false,
contentType: 'application/json'
});
Figure I'd add my current understanding (as of a few hours..)
On top of the ProcessData = true, by setting the 'traditional' flag, it can send it using a recursive encoding that captures complex structures, or a flat name value pair list.
So with respect to the OP, it worked without specifying processData since the default is true. So it converted the name value pairs in the object to a URLEncoded form. When you add the line back in, it calls your object's toString() method. Since you don't have a URL encoded string being returned by a toString() method (you have none), you will get a string such as "[object Object]". Perhaps jQuery cannot send strings that aren't URL encoded, or does not use the inherited toString() method.
The two solutions presented convert the object to a JSON string, and thus there is no processing, and thus processData does nothing. The contentType setting helps the server understand what is being sent.
In addition, one person commented that processing adds the encoded properties to the URL. Not quite: It sends that data via the most appropriate method; GET means appended to the URL, and POST means a urlencoded http body.