使用AJAX更改Twig模板变量

时间:2018-09-21 12:00:28

标签: javascript ajax symfony twig

我正在尝试使用我使用AJAX获得的新值重新加载html的一部分。

有一个

{% for client in clients %} 

循环,我使用AJAX获得了一组新的客户端:

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

        $clients=$this->getDoctrine()->getRepository(
        Client::class)->findBy(array('name'=>$search));

        $response = new JsonResponse();
        $response->setStatusCode(200);
        return $response->setData(['search' => $clients ]);

我正在尝试使用新获取的数据来更改客户端。

有办法吗?还是应该尝试其他技术?

谢谢!

3 个答案:

答案 0 :(得分:0)

您不能这样做,因为树枝是在服务器端渲染的。 您将需要更新{% for client in clients%}生成的HTML 使用javascript

答案 1 :(得分:0)

您无法通过AJAX更改clients的值,因为此模板已被渲染。但是,您可以像这样创建一个单独的树枝模板:

{# loop.html.twig #}
{% for client in clients %}
.. your code
{% endfor %}

然后将其包含在您的模板中,如下所示:

<div id="client-loop-container">
    {% include 'loop.html.twig' %}
</div>

因此在您的Ajax控制器中:

$clients=$this->getDoctrine()->getRepository(
        Client::class)->findBy(array('name'=>$search));

$template = $this->render('yourTemplate.html.twig')->getContent();
$response = new JsonResponse();
$response->setStatusCode(200);
return $response->setData(['template' => $template ]); 

最后,在ajax中,您应该具有以下内容:

$.ajax({
    type: "POST",
    success: function(response) {
        response = JSON.parse(response);
        $("div#client-loop-container").html(response.template);    
    }
});

答案 2 :(得分:0)

在您的控制器中

$clients=$this->getDoctrine()->getRepository(
        Client::class)->findBy(array('name'=>$search));

return $this->render('yourTemplate.html.twig')->getContent();

在树枝上

$.ajax({
    type: "POST",
    success: function(data) {

        $("div#client-loop-container").html(data);    
    }
});