【问题标题】:How to get Ajax post request by symfony2 Controller如何通过 symfony2 控制器获取 Ajax 发布请求
【发布时间】:2013-09-16 11:27:25
【问题描述】:

我这样发短信

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 request tester 尝试了正常的 post 请求(不是 Ajax)。

/app_dev.php/member/msgPost

控制器工作,$text 有值。

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

'success:function' 就像成功一样被调用。

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

【问题讨论】:

  • 在你的控制器中试试这个$text = $this-&gt;getRequest()-&gt;get('request');

标签: ajax symfony


【解决方案1】:

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

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

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

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

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

考虑更改变量的名称,因为它会造成混淆。

【讨论】:

    【解决方案2】:

    如果您以 JSON 格式(而不是 urlencoded 格式)发送数据,则需要直接访问请求正文:

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

    【讨论】:

      【解决方案3】:

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

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

      因为 request 是您的参数的名称。

      【讨论】:

        猜你喜欢
        • 2019-02-08
        • 1970-01-01
        • 1970-01-01
        • 2018-10-11
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 2016-06-12
        • 2015-09-23
        相关资源
        最近更新 更多