Ajax call with contentType: 'application/json' not working
ajax, content-type, jquery, json, php
Solution
When using `contentType: 'application/json'` you will not be able to rely on `$_POST` being populated. `$_POST` is only populated for form-encoded content types.
As such, you need to read your data from PHP raw input like this:
$input = file_get_contents('php://input');
$object = json_decode($input);
Of course if you want to send `application/json` you should actually send JSON, which you are not doing. You either need to build the object serialization to JSON directly, or you need to do something like this - Convert form data to JavaScript object with jQuery - to serialize the object from the form.
Honestly in your case, since you are dealing with form data, I don't quite think the use case for using `application/json` is there.
Problem
I have an ajax call, that sends form data to a php function. Since I read a lot that using `contentType: 'application/json'` is best practice I wanted to give it a try as well. But unfortunately my script doesn't return anything when I use it. If I remove it, the script does what it is supposed to do. Do you have any idea what the reason might be and why? Thank you! ``` $('#Form').submit(function(e) { e.preventDefault(); var content = $(this).serialize() + "&ajax=1"; $.ajax('app/class/controller/contactForm.php', { type: "POST", //contentType: 'application/json', dataType: 'json', data: content, success: function(result) { console.log(result); } }); }) ``` and my PHP: ``` if(isset($_POST['ajax']) && $_POST['ajax'] === '1') { echo json_encode(validateForm($_POST)); } ```