簡體   English   中英

通過Symfony2控制器將記錄從數據庫中提取到javascript

[英]Pulling records from database to javascript by Symfony2 controller

我試圖從我的數據庫中獲取類別列表,並將其放入我的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類別;

函數categoryLoad(){

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(categories)之后,我得到了空的對象,盡管它們的數量與數據庫中的記錄數匹配。

我剛剛開始在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

我的示例: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選項加載后,請再次啟用下拉菜單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM