如何在symfony2中收到JSON

Joh*_*auß 6 ajax jquery 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);
                }
            });
Run Code Online (Sandbox Code Playgroud)

和PHP:

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

        return $this->render('KnowHowERegistrationBackendBundle:Create:registration.html.twig');
}
Run Code Online (Sandbox Code Playgroud)

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

Lha*_*zzi 15

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

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

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

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息,请查看Silex的这本食谱http://silex.sensiolabs.org/doc/cookbook/json_request_body.html

  • 它是`$ request-> request-> replace(is_array($ data)?$ data:array());`参见api [here](http://api.symfony.com/3.1/Symfony/Component/HttpFoundation /Request.html)以获取用于$ request对象的方法。 (2认同)

viy*_*ncs 2

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

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

添加参数 JSONFile 或任何你想要的东西。你可以使用 json 解码从客户端检索 json。

这是 php 中的代码:

$json = $_POST['JSONFile'];

var_dump(json_decode($json));
var_dump(json_decode($json, true)); //true option if you will convert to array
Run Code Online (Sandbox Code Playgroud)

在 symfony2 控制器中直接访问$_POST是不好的所以使用请求 $request = $this->getRequest(); $request->request->get('JSONFile'); // get a $_POST parameter

  • 虽然这可行且并不复杂,但直接访问 `$_POST` 并不是使用 Symfony 2 的好方法。jBinfo 的答案要好得多。 (5认同)