如何从 symfony2 中的渲染函数获取 json 编码

how to get json encode from render function in symfony2

我正在尝试在 symfony 中使用 ajax,但对我来说有些困难。我在树枝中有一个表格,我在其中获得了一个值,用于在我的数据库中搜索产品:

这是树枝中的形式:

<form id="myForm" method="post" action="{{ path('my_app_greeting') }}"> <div class="input-group"> <input id="name_id" name="name" type="text" class="form-control" placeholder="Buscar repuesto..." required /> <span class="input-group-btn"> <button id="search-button" class="btn btn-default" type="button">Buscar</button> </span> </div><!-- /input-group --></br> </form>

这是我在同一个树枝模板中使用 jquery 的代码,用于使用 ajax:

发送数据
$(document).ready(function(){
    $("#myForm").submit(function(){
    var value = $("#name_id").val();
    $.ajax({
        type: "POST",
        data: { productValue: value },
        url: "/ventas/test/ajax/"
    })
    .done(function(response){
        template = response;
        $('#output').html(template.content); 
    })
    .fail(function(jqXHR, textStatus, errorThrown){
        alert('Error : ' + errorThrown);
    });
    return false;
    });
});

后来我了解到 symfony 如何与 ajax 一起工作,我认为对我的 "problem" 最好的解决方案是创建一个名为 "ajaxContent.html.twig" 的新树枝模板,并使用控制器:

public function testAction()
{
    $request  = $this->get('request');
    $name     = $request->request->get('productValue');
    $template = $this->renderView('AcmeDemoTwoBundle:Ventas:ajaxContent.html.twig', array('value' => $name));
    $json     = json_encode($template);
    $response = new Response($json, 200);
    $response->headers->set('Content-Type', 'application/json');
    return new Response($response);
}

通过这种方式,稍后我想将所有 html 内容放入我的原始模板中,但我在 json 编码方面遇到了问题。我不太了解它是如何工作的,以及如何更好地接收数据并将其显示在树枝模板中。我怎样才能做到这一点? (我尝试使用 $('#output').html(template.content); 显示数据但不起作用)。

感谢您的帮助!

你应该首先使用表单数组来解决你的问题试试这个

$template['content']

你的controller代码好像不太好

我的意思是如果你想 return json 那么你渲染 html 是为了什么(不是 json)树枝模板?这是第一个。

然后您可以通过使用 JsonResponse 来获得 json 响应,而不是为标准响应设置 header。

我不知道 ajaxContent.html.twig 发生了什么,但我会这样做:

public function testAction(Request $request)
{
    $name     = $request->get('productValue');
    $response = $this->get('my_response_sercive')->giveMeResponseForTestAction($name);

    return new JsonResponse($response);
}

如果您正在等待 html 响应 javascript,您必须为 ajax 请求设置选项数据类型:'html'。 然后在 testAction 中你不必设置 'application/json' header 也不必 json_encode $template 变量 - 但只需像现在一样呈现你的模板。 所以在这种情况下你可以这样做:

public function testAction(Request $request)
{
    $name     = $request->get('productValue');

    return $this->renderView('AcmeDemoTwoBundle:Ventas:ajaxContent.html.twig', array('value' => $name));
}

之后你可以直接将html放入你的#output块:

$('#output').html(response);