我试图在symfony中使用ajax,但对我来说有些困难。我在twig中有一个表单,我获得了一个用于在我的数据库中搜索产品的值:
这是树枝上的表格:
<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>
这是我在相同的twig模板中使用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一起工作,我认为最好的解决方案是我的问题&#34;创建一个名为&#34; ajaxContent.html.twig&#34;的新树枝模板。例如,使用控制器执行此操作:
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);
显示数据,但不起作用。)
感谢您的帮助!
答案 0 :(得分:2)
您在控制器中的代码似乎不太好。
我的意思是如果你想要返回json那么你为什么渲染 html (不是json)twig模板?那是第一次。
然后你可以使用JsonResponse而不是为标准响应设置标题来获得json响应。
我不知道ajaxContent.html.twig中发生了什么,但我会这样做:
public function testAction(Request $request)
{
$name = $request->get('productValue');
$response = $this->get('my_response_sercive')->giveMeResponseForTestAction($name);
return new JsonResponse($response);
}
如果您在javascript中等待html响应,则必须为您的ajax请求设置选项dataType:'html'。 然后在testAction中,您不必设置'application / json'标头,也不必使用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);
答案 1 :(得分:0)
您应首先使用表单数组来解决此问题
$template['content']