使用Ajax(无表单)将POST数据以JSON格式发送到Symfony2 Controller

时间:2014-04-27 21:49:58

标签: ajax symfony request

大家晚上好!

我想将JSON Post Data发送到Symfony控制器没有表单,但它不起作用。我构建了一个JSON数据线,并且它构建良好,它是 NOT 问题。当我使用AJAX发送数据时,请求未填写

这是我的Javascript代码:

function validerSession()
{
    //I don't describe the composition of the dataline.
    var dataObject = JSON.stringify(obj); //My dataline JSONified

    $.ajax({
        type: "POST",
        url: Routing.generate('cloud_money_drop_validerSession', { id: {{ partie.id }}, idSession: sessionId }),
        data: dataObject,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (donnees) {
            alert("Hello");
        }
    });
}

AJAX通话工作。

以下是接收数据的PHP Symfony Controller方法:

public function validerSessionAction(Partie $partie, Session $session)
{
    $request = $this->get('request');
    $data = json_decode($request->getContent());

    $serializer = $this->container->get('jms_serializer');
    $response = $serializer->serialize($data, 'json');
    return new Response($response);
}

$data 中没有任何数据。

编辑:数据库JSONified的一个示例

{"trappes":{"1":{"id":"134","montant":"5000"},"2":{"id":"135","montant":"15000"},"3":{"id":"136","montant":"20000"},"4":{"id":"137","montant":"0"}}}

你知道吗?我确信这是一个常见的问题。 感谢您的参与!

CloudCompany

1 个答案:

答案 0 :(得分:2)

我找到了解决方案。 这并不困难。

没有必要对数据进行JSonify。控制器能够理解原始数据类型。

所以这是我简化的AJAX调用:

function validerSession()
{
    obj = new Object();
    obj["title"] = "Title for example";

    $.ajax({
        type: "POST",
        url: Routing.generate('cloud_money_drop_validerSession', { id: {{ partie.id }}, idSession: sessionId }),
        data: obj,
        success: function (donnees) {
            data = Parse.JSON(donnees);
            alert(data.title); //Show "Title for example"
        }
    });
}

这是我的控制器。它可以将数据恢复为值数组。

public function validerSessionAction(Partie $partie, Session $session)
{
    $request = $this->get('request');
    $data = $request->request->all();

    $serializer = $this->container->get('jms_serializer');
    $response = $serializer->serialize($data["title"], 'json');
    return new Response($response);
}

感谢您的帮助!