如何从 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);
我正在尝试在 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);