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

whi*_*ear 21 ajax symfony

我发这样的短信

HTML标记

<textarea id="request" cols="20" rows="4"></textarea>
Run Code Online (Sandbox Code Playgroud)

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

symfony2控制器代码

$request = $this->container->get('request');
$text = $request->request->get('data');
Run Code Online (Sandbox Code Playgroud)

但是$text是空的......

我已经通过firefox http请求测试器尝试了正常的post请求(不是Ajax).

/app_dev.php/member/msgPost
Run Code Online (Sandbox Code Playgroud)

控制器工作并$text具有价值.

所以我认为php代码没问题,但是Ajax方面存在问题

'success:function'被称为成功.

你怎么能得到javascript数据结构的内容?

sf_*_*anb 27

首先,您不需要像控制器已经实现的那样访问控制器中的容器 ContainerAware

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

public function ajaxAction(Request $request)
{
    $data = $request->request->get('request');
}
Run Code Online (Sandbox Code Playgroud)

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

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

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


Eln*_*mov 22

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

$data = json_decode($request->getContent());
Run Code Online (Sandbox Code Playgroud)