如何通过symfony2 Controller获取Ajax发布请求

时间:2013-09-16 11:27:25

标签: ajax symfony

我发送这样的短信

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方面存在问题,但是

'成功:函数'被调用,就像成功一样。

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

3 个答案:

答案 0 :(得分:27)

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

所以基本上你的代码应该在Controller.php

中看起来像这样
public function ajaxAction(Request $request)
{
    $data = $request->request->get('request');
}

此外,通过在应用程序的JS中使用console.log(data),确保您发送的数据不为空。

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

考虑更改变量的名称,因为它令人困惑。

答案 1 :(得分:21)

如果您将数据作为JSON发送 - 而不是以urlencoded格式发送 - 您需要直接访问请求正文:

$data = json_decode($request->getContent());

答案 2 :(得分:3)

获取值时你做错了,你必须使用:

$data = $request->request->get('request');

'因为请求是参数的名称。