2013-02-12 1 views
4

현재 종합적인 답변을 찾지 못했습니다 .. 다른 선택의 선택에 따라 선택 옵션을 변경하는 방법을 배우고 싶습니다. 예. 카테고리 일대 다 하위 카테고리Symfony2 선택 아약스 선택

카테고리 및 하위 카테고리 선택 옵션에서 콘텐츠를 선택하십시오. 내게 손을 줄 수 있습니까?

답변

2

결국 나는 그의 방법 자바 스크립트 :

$('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 출력을 다시 전송하는 것이 가능해진다는 것입니다. 우수 솔루션, 감사합니다. –

3

먼저 당신이

   $('# 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"); 
      } 
     }); 

컨트롤러에서 JQuery와 예를 사용하여 작업에 컨트롤을 전달하는 라우팅 URL을 사용할 필요가

/** 
    * @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

+0

그럴 수 있다고 생각합니다 ... –