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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Ajax(无表单)将POST数据以JSON格式发送到Symfony2 Controller相关的知识,希望对你有一定的参考价值。

晚上好大家!

我想将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

答案

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

没有必要对数据进行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);
}

谢谢您的帮助!

以上是关于使用Ajax(无表单)将POST数据以JSON格式发送到Symfony2 Controller的主要内容,如果未能解决你的问题,请参考以下文章

如何通过ajax从表单发送POST数据数组?

ajax 上传文件,post上传文件,ajax 提交 JSON 格式的数据

将 HTML 表单数据放入 JSON 对象并进行 AJAX POST 调用

我可以使用 AJAX 'POST' 将数据发布到我服务器上的 JSON 文件吗?

使用 Ajax POST 请求将图像和 JSON 数据发送到服务器?

AJAX 请求正文为空(无 jQuery)