我试图从我的数据库中获取类别列表并将其放入我的javascript代码中,以便我以后可以使用它。但是我遇到了这个任务的问题 - 将这个列表返回给javascript后 - 它们都是空的。
这是我的symfony2控制器操作代码:
public function fetchCategoriesAction(){
$categories = $this->getDoctrine()->getRepository('MyDataBundle:Category')->findAll();
$return=array("responseCode"=>200, "categories"=>$categories);
$return=json_encode($return);//jscon encode the array
return new Response($return,200,array('Content-Type'=>'application/json'));
}
这是我的js代码:
var categories;
function categoriesLoad(){
var url=$("#categories_fetch").val(); //link to my controller
$.post(url,function(data){
if(data.responseCode==200 ){
categories = data.categories;
console.log(categories);
}else{
console.log("An unexpeded error occured.");
}
});
}
我正在跑步
$(document).ready(function() {
categoriesLoad();
});
但是在使用console.log(类别)之后我就得到了 空对象,尽管它们的编号与数据库中的记录数相匹配。
我刚开始在symfony2中编程,我很感激任何帮助:)
编辑:
解决
我刚刚更改了控制器操作代码。 在这里更新:
public function fetchCategoriesAction(){
$encoders = array(new XmlEncoder(), new JsonEncoder());
$normalizers = array(new GetSetMethodNormalizer());
$serializer = new Serializer($normalizers, $encoders);
$em = $this->getDoctrine()->getManager();
$categories = $em->createQuery(
'SELECT u
FROM MyDataBundle:Category u'
)->getResult();
$categories = $serializer->serialize($categories, 'json');
$return=array("responseCode"=>200, "categories"=>$categories);
$return=json_encode($return);
return new Response($return,200,array('Content-Type'=>'application/json'));
}
现在它运作正常。 感谢@Pawel和@SAM
答案 0 :(得分:2)
我的例子: PHP函数:
public function getDistrictListAction($id) {
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
// DQL
);
return new JsonResponse($query->getArrayResult());
}
JS代码:
var dropdown = $('.dropdown-selector');
dropdown.change( function() {
$.ajax({
url: 'url_to_function'
beforeSend: function() {
dropdown.attr('disabled', true);
},
success: function(data) {
dropdown.find('option').not('[value=]').remove();
$.each( JSON.parse(data), function(key, value) {
dropdown.append( $( "<option></option>" ).attr( "value", value.id ).text( value.name ));
});
dropdown.attr('disabled', false);
}
});
}
这可以设置更改事件,例如作为回调。在发送之前,您禁用下拉列表,并在通过AJAX选项加载后再次启用它。