我在search.html.twig
页面上有一个javascript事件监听器,它将触发ajax请求。在下面的示例中,我的目标是使ajax调用成功,以便执行alert()
消息。
我习惯了扁平的PHP方法:
echo json_encode($myAry);
Symfony的路由系统使得对jjax的json响应变得混乱。我目前收到内部服务器错误500。
我很感激有关如何解决这个问题的任何建议。预先感谢!
DefaultController
public function showCompanyAction($id)
{
$repository = $this->getDoctrine()->getRepository('TestBundle:Company');
//get company based on id
//prepare json object
//return it to search.html.twig
return new JsonResponse(array('name' => 'hello'));
}
JQuery(search.html.twig)
{% block jquery %}
<script>
$(function(){
$.ajax({
type: "POST",
url: "../company/booth/2",
dataType: 'json',
success: function(msg){
alert(msg);
}
})
});
</script>
{% endblock %}
答案 0 :(得分:4)
Jivan的答案很好,这是一个更易于维护的替代方案:
use Symfony\Component\HttpFoundation\JsonResponse;
class YourController
{
public function yourAction()
{
$response = new JsonResponse();
$response->setData(array('message' => 'hello'));
return $response;
}
}
使用此解决方案,您无需对数组进行编码并指定响应标头(Content-Type
和所有)。如果JSON响应的特异性发生变化,那么您就不必担心更新代码了。
答案 1 :(得分:2)
要在Symfony2中返回json响应,您必须从为company/booth/2
定义的路由调用的控制器中返回此响应:
use Symfony\Component\HttpFoundation\Response;
class YourController
{
public function YourAction()
{
$response = json_encode(array('message' => 'hello'));
return new Response($response, 200, array(
'Content-Type' => 'application/json'
));
}
}
回复中的200
是Http Status Code。 200表示“请求已完成”。
答案 2 :(得分:0)
要使用jQuery处理JsonResponse,您可以使用“each”函数执行此操作:
public function showCompanyAction($id)
{
return new JsonResponse(
array(
array('name' => 'hello'),
array('name' => 'bye'),
)
);
}
{% block jquery %}
<script>
$(function() {
$.ajax({
type: "POST",
url: "../company/booth/2",
dataType: 'json',
success: function(data) {
$.each(data, function (index, element) {
alert(element.name);
});
}
})
});
</script>
{% endblock %}