ajax post请求处理symfony2控制器中的数据

San*_*kas 11 ajax jquery symfony

我真的不明白如何处理来自ajax请求的帖子数据.这是我的javascript:

$.ajax({
     type: "POST",
     url: Routing.generate('save'),
     contentType: 'application/json; charset=UTF-8',
     data: {
          title: title,                
          description: description,
          questions: questions,              
         }
  });
Run Code Online (Sandbox Code Playgroud)

在控制器操作中获取数据的唯一方法是:

$content = $request->getContent()
Run Code Online (Sandbox Code Playgroud)

$ content是url参数字符串.为什么我没有正常获取数据:

$request->get('title')
Run Code Online (Sandbox Code Playgroud)

使用jquery ajax方法处理post数据的正确方法是什么?

非常感谢你.

编辑

所以,我发现了以下问题:

在我当前的项目中,请求如下所示:

https://dl.dropboxusercontent.com/u/17861060/false.png

$.ajax({
            type: "POST",
            url: Routing.generate('poll_save'),                
            data: {
                title: title                    
            }
        })
Run Code Online (Sandbox Code Playgroud)

数据是通过Request Payload请求的,但我不知道为什么.

在一个干净的项目中,请求如下所示:

https://dl.dropboxusercontent.com/u/17861060/right.png

$.ajax({
                type: "POST",
                url: '{{path('_demo')}}',                    
                data: {
                    title: 'title',                
                    description: 'description',
                    questions: 'questions',
                    pollid: 1                        
                }
            })
Run Code Online (Sandbox Code Playgroud)

我项目中的任何内容都出错了.您是否知道为什么通过请求有效负载请求数据?

Sir*_*ton 9

您是否在控制器中使用请求对象?

<?php
namespace Acme\DemoBundle\Controller;

use Symfony\Component\HttpFoundation\Request;
//...other things to use

class MyController extends Controller
{
    public function handleRequestAction() {

        $request = $this->get('request');
        //request your data
        $title   = $request->get('title');
        //or in one line
        $title   = $this->get('request')->request->get('title');
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

当我想从ajax调用中获取数据时,这是我的正常方式.你能发布$ content包含的内容吗?

我发现像你一样发布数据没问题.构造一个json对象可能会有所帮助,但是你这样做的方式对我来说似乎很好.我也是这样做的.

编辑

通常,您也可以通过执行以下操作来访问请求中的所有数据:

$all = $request->request->all();
Run Code Online (Sandbox Code Playgroud)

也许你可以var_dump()通过变量来查看是否存在某些内容.


ana*_*mok 1

您可以构建 json 对象并使用 JSON.stringify 将 JSON 对象传递到控制器。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify

var obj = {
      title: title,                
      description: description,
      questions: questions              
};

$.ajax({
 type: "POST",
 url: Routing.generate('save'),
 contentType: 'application/json; charset=UTF-8',
 data: JSON.stringify(obj)
});
Run Code Online (Sandbox Code Playgroud)