How to send JSON instead of a query string with $.ajax?

javascript, jquery, json, query-string

Solution

You need to use `JSON.stringify` to first serialize your object to JSON, and then specify the `contentType` so your server understands it's JSON. This should do the trick:

$.ajax({
    url: url,
    type: "POST",
    data: JSON.stringify(data),
    contentType: "application/json",
    complete: callback
});

Note that the `JSON` object is natively available in browsers that support JavaScript 1.7 / ECMAScript 5 or later. If you need legacy support you can use json2.

Problem

Can someone explain in an easy way how to make jQuery send actual JSON instead of a query string? ``` $.ajax({ url : url, dataType : 'json', // I was pretty sure this would do the trick data : data, type : 'POST', complete : callback // etc }); ``` This will in fact convert your carefully prepared JSON to a query string. One of the annoying things is that any `array: []` in your object will be converted to `array[]: []`, probably because of limitations of the query sting.

Original source

Related problems