6

I'm currently working on a symfony2 based project with lots of ajax usage.

Now I want to send a JSON via $.ajax(); (POST type) and handle it in a symfony2 controller. But I'm not quite sure how I access the JSON inside the controller.

Right now I've got the following:

JS:

            $.ajax({
                url: url,
                type:"POST",
                data:json,
                success:function (data) {
                    $('div.tooltip p').html(data);
                }
            });

And the PHP:

    public function registrationAction(Request $request) {
        if($request->getMethod() == 'POST') {
            // How to receive??
        }

        return $this->render('KnowHowERegistrationBackendBundle:Create:registration.html.twig');
}

The only thing I don't know is how can I access the JSON? I'm sure it's pretty easy I just don't see it. Thanks for your help!

1

2 Answers 2

15

in your ajax request u must set the content type to application/json:

$.ajax({
      url: url,
      type:"POST",
      contentType: 'application/json',
      data:json,
      success:function (data) {
           $('div.tooltip p').html(data);
      }
});

and in your controller use this to parse the content:

if($request->getMethod() == 'POST') {
    if (0 === strpos($request->headers->get('Content-Type'), 'application/json')) {
        $data = json_decode($request->getContent(), true);
        $request->replace(is_array($data) ? $data : array());
    }
}
Sign up to request clarification or add additional context in comments.

1 Comment

It is $request->request->replace(is_array($data) ? $data : array()); See api here for methods used on $request object.
2

your code i think not complete,if you want to send data to server with json format i think the setup $.ajax like this, just example

$.ajax({
                url: url,
                type:"POST",
                data:"JSONFile=" + json,
                success:function (data) {
                    $('div.tooltip p').html(data);
                }
            });

add parameter JSONFile or whatever what do you want.and you can use json decode to retrive json from client.

this is code in php:

$json = $_POST['JSONFile'];

var_dump(json_decode($json));
var_dump(json_decode($json, true)); //true option if you will convert to array

in symfony2 controller direct acces $_POST is bad so use request $request = $this->getRequest(); $request->request->get('JSONFile'); // get a $_POST parameter

2 Comments

While this works and is uncomplicated, accessing $_POST directly is not a good way to do it with Symfony 2. The answer from jBinfo is much better.
yup my code just example in php, in Sysmfony 2 maybe to get parameters and prefer hight security that will be different case. to get parameter you can use $request->request->get('JSONFile'); // get a $_POST parameter

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.