如何在symfony2中收到JSON

时间:2012-03-15 10:57:16

标签: jquery ajax json symfony

我目前正在开发一个基于symfony2的项目,它有很多ajax用法。

现在我想通过$.ajax();(POST类型)发送JSON并在symfony2控制器中处理它。 但我不太确定如何在控制器中访问JSON。

现在我有以下内容:

JS:

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

PHP:

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

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

我唯一不知道的是如何访问JSON? 我确信这很容易,我只是看不到它。 谢谢你的帮助!

2 个答案:

答案 0 :(得分:15)

在你的ajax请求中,你必须将内容类型设置为application / json:

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

并在您的控制器中使用它来解析内容:

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());
    }
}

有关更多信息,请查看Silex http://silex.sensiolabs.org/doc/cookbook/json_request_body.html

的这本食谱

答案 1 :(得分:2)

您的代码我认为不完整,如果您想以json格式向服务器发送数据我认为设置$ .ajax就像这样,只是示例

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

添加参数JSONFile或您想要的任何内容。您可以使用json decode从客户端检索json。

这是php中的代码:

$json = $_POST['JSONFile'];

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

在symfony2控制器中直接访问$_POST是错误的,因此请使用请求 $request = $this->getRequest(); $request->request->get('JSONFile'); // get a $_POST parameter