jquery autocomplete& Symfony2的

时间:2014-10-29 14:18:09

标签: jquery ajax symfony autocomplete

所以我想在输入上显示这个国家/地区列表: 我使用Jquery UI Autocomplete和对db的ajax调用。

Javascript:

$("#fos_user_registration_form_country").autocomplete({
    minLength: 2,
    scrollHeight: 220, 
       source: function(req, add){
      $.ajax({
            url:Routing.generate('user_register_countries_autocomplete'),
            type:"get",
            dataType: 'json',
            data: 'title_search='+req.term,
            async: true,
            cache: true,
            success: function(data){
                var suggestions = [];  
                //process response  
                $.each(data, function(i, val){  
                    suggestions.push({"name": val.countryName});  
                });  
                //pass array to callback  
                add(suggestions); 
            }
        });
   }
});

控制器:

 public function AutoCompletePaysAction()
{
    $repository = $this->getDoctrine()->getManager()->getRepository('MyAwesomeWebsiteHomeBundle:Countries');

    $listeCountries = $repository->countriesArray();
    $liste = json_encode($listeCountries);

    return new Response($liste);
}

回购

public function countriesArray()
    {
        // $query = $this->createQueryBuilder('s');

        $query = $this->_em->createQuery("SELECT a.countryName FROM MyAwesomeWebsiteHomeBundle:Countries a");
        return $query->getArrayResult();
    }

在firebug中显示的内容(我的ajax调用的响应=所有国家/地区)

[{"countryName":"United States"},{"countryName":"Canada"},{"countryName":"Afghanistan"},{"countryName":"Albania"},...


- >每次我在输入中键入一个字母时,ajax调用似乎都能正常工作,但是没有任何建议出现,因为它应该与自动完成相关。

每次输入一个字母来检索相同的值时,对我来说似乎很奇怪,但这就是它在doc中的完成情况。此外,我试图预加载阵列,但我只是无法使其工作。 tldr:输了。

有什么建议吗?谢谢!

1 个答案:

答案 0 :(得分:2)

您可以更改控制器以获取该术语。请记住,默认情况下,自动填充需要EITHER包含单个术语的数组。或者使用labelvalue键的对象数组。

public function AutoCompletePaysAction(Request $request)
{
    $term = $request->get('term',null)
    $repository = $this->getDoctrine()->getManager()->getRepository('MyAwesomeWebsiteHomeBundle:Countries');
    if($term){
        $countries = $repository->createQueryBuilder('c')
            ->where("c.countryName LIKE '%:term%'")
            ->setParameter('term', $term)
            ->getQuery()
            ->getResult();
    }
    else{
        $countries = $repository->findAll();
    }
    $list = array();
    foreach($countries as $country){
        array_push($list, array('label'=>$country->getCountryName(), 'value'=>$country->getCountryName());
    }
    return new JsonResponse($list,200);
}