所以我想在输入上显示这个国家/地区列表: 我使用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:输了。
有什么建议吗?谢谢!
答案 0 :(得分:2)
您可以更改控制器以获取该术语。请记住,默认情况下,自动填充需要EITHER包含单个术语的数组。或者使用label
和value
键的对象数组。
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);
}