我正在尝试获取AJAX响应,因此我可以摆弄它以使我的表单更易于使用。当我使控制器(下面的代码)返回var_dump()
的正常响应时,我得到对象的输出,所以我知道查询没有错(我使用ID 1来查询调试)。但是,当我使用json_encode()
返回输出时,我只得到一个空的JSON文件。
<div id="content">
<form id="myForm" action="{{path('snow_ajax')}}" method="POST" >
Write your name here:
<input type="text" name="name" id="name_id" value="" /><br />
<input type="submit" value="Send" />
</form>
</div>
<script type="text/javascript">
$(document).ready(function() {
$("#myForm").submit(function(){
var url=$("#myForm").attr("action");
$.post(url,{
formName:"ajaxtest",
other:"attributes"
},function(data){
if(data.responseCode==200 ){
alert("Got your json!");
}
else{
alert("something went wrong :(");
}
});
return false;
});
});
</script>
public function ajaxAction()
{
$location = $this->getDoctrine()->getRepository('SnowFrontBundle:Location')
->find(1);
$output = var_dump($location);
return $output;
}
public function ajaxAction()
{
$location = $this->getDoctrine()->getRepository('SnowFrontBundle:Location')
->find(1);
return new Response(json_encode($location), 200);
}
有人可以帮帮我吗?这让我疯了!
答案 0 :(得分:5)
我设法通过使用Doctrine2的实体管理器来修复它,以便在数组中获得结果,之后我继续将其编码为JSON。我不确定这是否是最干净的方法(根据我的IDE,getEntityManager()似乎已被弃用)但它现在可以正常工作。
public function ajaxAction()
{
$em = $this->getDoctrine()->getEntityManager();
$query = $em->createQuery('SELECT l FROM Snow\FrontBundle\Entity\Location l WHERE l.id=:id');
$query->setParameter('id', 1);
$result = $query->getArrayResult();
return new Response(json_encode($result), 200);
}
答案 1 :(得分:2)
这种情况正在发生,因为json_encode()
不知道如何将对象(StdClass
除外)序列化为JSON。至少有两种方法可以解决这个问题:
JsonSerializable
,当您在对象上调用json_encode()
时,PHP将使用该对象。Serializer
组件将对象转换为使用多种不同方法的JSON。我不会解释如何做到这一点,因为文档很清楚。答案 2 :(得分:-1)
代码示例:
$entity = // Get some entity
$result = array(
'id' => $entity->getId(),
'name' => $entity->getName()
);
return new Response(json_encode($result));
答案 3 :(得分:-1)
如果要获取数据,则必须使用查询存储库(dsl),并在$query
变量上使用getArrayResult()
方法。这允许你直接获得一个数组。