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

问题描述 投票:0回答:1

晚上好大家!

我想将JSON Post Data发送到没有表单的Symfony控制器,但它不起作用。我构建了一个JSON数据线,它构建得很好,不是问题所在。当我使用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

ajax symfony request
1个回答
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);
}

谢谢您的帮助!

© www.soinside.com 2019 - 2024. All rights reserved.