我正在尝试使用我使用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 ]);
我正在尝试使用新获取的数据来更改客户端。
有办法吗?还是应该尝试其他技术?
谢谢!
答案 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);
}
});