如何在Symfony2控制器中获取Ajax POST请求

22

我发送文本消息的方式像这样

HTML标记

<textarea id="request" cols="20" rows="4"></textarea>

JavaScript 代码

var data = {request : $('#request').val()};

$.ajax({
    type: "POST",
    url: "{{ path('acme_member_msgPost') }}",
    data: data,
    success: function (data, dataType) {
        alert(data);
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        alert('Error : ' + errorThrown);
    }
});

symfony2 控制器代码

$request = $this->container->get('request');
$text = $request->request->get('data');

但是$text为空...

我已经通过Firefox的HTTP请求测试器尝试了普通的POST请求(非Ajax)。

/app_dev.php/member/msgPost

控制器起作用,$text 有一个值。

所以我认为php代码没问题,问题在于Ajax端,然而“success:function”被称为成功。

如何获取javascript数据结构的内容?


1
在你的控制器中尝试这个 $text = $this->getRequest()->get('request'); - NHG
3个回答

30

首先,在您的控制器中不需要访问容器,因为它已经实现了ContainerAware

因此,基本上您的代码应该在Controller.php中如下所示:

public function ajaxAction(Request $request)
{
    $data = $request->request->get('request');
}

同时,确保在应用程序的JS中使用console.log(data)来检查您发送的数据不为null。

最后回答您的问题: 您没有使用正确的变量,您需要访问$('#request').val()的值,但是您将其存储在一个request变量中,并且您在控制器中使用了data变量名。

考虑更改变量名称,因为这很容易引起混淆。


24
如果您将数据发送为JSON格式 - 而不是表单编码格式 - 您需要直接访问请求正文:
$data = json_decode($request->getContent());

3
获取值时,您的做法是错误的,必须使用以下方式:
$data = $request->request->get('request');

因为request是您的参数名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接