2013-02-12 42 views
4

我還沒有發現任何全面的答案.. 我想了解如何根據另一個選擇的選擇更改選擇選項。 例如。 類別一對多子類別Symfony2 select choice ajax

我從類別和子類別中選擇一個選項來選擇內容更改。 你能幫我一下嗎?

回答

2

到底我決定用t他的方法: 的javascript:

$('select[name*="[category][category]"]').prop('selected', true).change(function(){ 
      var Id = $(this).val();   
      var url = Routing.generate('route_to_retrieve_subcategory'); 

      $.post(url, 
      { 'idCat': Id 
      }, function(results){ 
       var sub = $('select[name*="[category][category]"]').parent().find('select[name*="[subCategory][]"]'); 
       sub.empty(); 
       $.each(results , function(key, value) { 
        sub 
        .append($("<option></option>") 
        .attr("value",value.id) 
        .text(value.subCategory)); 
       }); 

     }); 
    }); 

控制器:

public function getSubcategoryAction(Request $request) 
{ 
     $Id = $request->get('idCat'); 
     $em = $this->getDoctrine()->getManager(); 
     $entities = $em->getRepository('MyBusinessBundle:SubCategories')->findSubCategories($Id); 
     $output = array(); 
     foreach ($entities as $member) { 
      $output[] = array(
       'id' => $member->getId(), 
       'subCategory' => $member->getSubCategory(), 
     ); 
     } 

     $response = new Response(); 
     $response->headers->set('Content-Type', 'application/json'); 
     $response->setContent(json_encode($output)); 
     return $response; 
} 

路線:

route_to_retrieve_subcategory: 
pattern: /route_to_retrieve_subcategory 
defaults: { _controller: "MyBusinessBundle:ajax:getSubcategory" } 
options: 
    expose: true 

我不想通過課程來傳遞參數,我覺得這沒有什麼意義!

非常感謝shrujan shetty的靈感。

+0

使用參數的一個參數是它很容易在瀏覽器中測試ajax url並查看發送的json輸出。非常好的解決方案,謝謝。 – 2013-05-30 11:52:28

3

首先,你需要使用jQuery 例如使用路由URL傳遞控制的動作

   $('# category id').change(function(){ 
       var Id = $('#category id').val();   
       var url = Routing.generate('route_to_retrieve_subcategory', { 'Id': Id }); 

       $.post(url, 
       { 'Id': Id 
       },function(data){ 
        $('#subcategoryId').html(data); 
       },"text"); 
      } 
     }); 

在控制器

/** 
    * @Route("subcategory/{Id}",name="route_to_retrieve_subcategory") 
    * @Template() 
    */ 
    public function getSubcategoryAction($Id) 
    { 
      //code 
     return new Response($subcategoryList, 200); 


    } 

注: 的路由必須在路由上市。 yml文件

route_to_retrieve_subcategory: 
    pattern: /route_to_retrieve_subcategory/{Id} 
    defaults: {_controller: YourBundle:YourController:getSubcategory} 
    options: 
     expose: true 
+0

感謝您的回覆! 但是對於我來說呢?我創建了一個由查詢生成的新選擇字段? 爲什麼把路徑上的Id參數?與方法$ .ajax的「data」參數不一樣嗎? 只是改變選擇的選項而不是取代整個選擇不是更好嗎? – Lughino 2013-02-12 12:38:43

+0

我想你可以這樣做...... – 2013-02-13 13:22:20