Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JQuery Post sends form data and not JSON

Trying to send json. Here's my function:

var object = ... ;  $.ajax({       type: 'POST',       url: '<url>',       contentType: 'application/json; charset=utf-8',       dataType: 'json',       data: object     }); 

But whenever I check Chrome, it always sends it as query params:

Request Payload: startDate=Wed+Dec+19+2012+19%3A00%3A00+GMT-0500+(EST)&endDate=Thu+Dec+20+2012+19%3A00%3A00+GMT-0500+(EST)& 

How do I get it to send as JSON?

like image 956
Jason Avatar asked Dec 19 '12 16:12

Jason


People also ask

How is form data different from JSON?

FormData is a bit different than JSON. It can't have nested data, it's just "key value". It can have multiple entries on one key, unlike JSON.

Can we send FormData in JSON?

Formating data to JSON and making a POST request fromEntries() method. Using the JSON. stringify() method then format the plain form data as JSON. Specify the HTTP request method as POST and using the header field of the Fetch API specify that you are sending a JSON body request and accepting JSON responses back.


2 Answers

With JSON.stringify(object)

Sample:

$.ajax({     type: 'POST',     url: '<url>',     contentType: 'application/json; charset=utf-8',     dataType: 'json',     data: JSON.stringify(object) }); 

Note JSON.stringify is not supported in all browsers (http://caniuse.com/#feat=json ), in particular browsers IE7 and lower.

If you need to support this browsers too you can use this Javascript library: https://github.com/douglascrockford/JSON-js

like image 162
Stefan Avatar answered Sep 24 '22 17:09

Stefan


Stringify using JSON.stringify(object)

Modify the data field to:

... data: JSON.stringify(object), ... 

The way you are doing it, IMO, jQuery sees the parameter as a dictionary (key-value pairs), and constructs a percentile-encoded string from that; and hence you see that output.

like image 45
UltraInstinct Avatar answered Sep 21 '22 17:09

UltraInstinct