2017-12-17 1 views
0

Ich versuche eine Autocomplete-Suche zu implementieren, wenn ich auf meiner Website nach einer Stadt suche (Fahrgemeinschaften). Ich habe einen Controller searchCity, die eine json mit den Städten zurück:Select2, Symfony: Autocomplete mit entfernten Daten funktioniert nicht

/** 
* @Route ("/city/{term}") 
*/ 
public function searchCity($term) 
{ 
    $query = $this->getDoctrine()->getRepository('App:Ville') 
     ->createQueryBuilder('v') 
     ->select('v.id, v.nomReel AS text') 
     ->where('v.nomSimple LIKE :term') 
     ->setParameter('term', $term.'%') 
     ->getQuery() 
     ->getResult(); 

    $query = array('results' => $query); 
    return new JsonResponse($query); 
} 

Für exemple, wenn ich/Stadt/Paris gehe ich:

{"results":[ 
     {"id":30438,"text":"Paris"}, 
     {"id":29427,"text":"Paris-l\u0027H\u00f4pital"}, //I know single quotes 
     {"id":33294,"text":"Parisot"},     //don't work 
     {"id":33531,"text":"Parisot"}]} 

wählen:

<div class="container"> 
    <select id="citySelect" class="select2 select2-dropdown select2-search" name="term"> 
    </select> 
</div> 

javascript:

 $(document).ready(function(){ 
      $("#citySelect").select2({ 
       placeholder: "Select city", 
       ajax: { 
        dataType: "json", 
        url: function (params) { 
         return '/city/' + params.term; 
        }, 
        processResults: function (data) { 
         return { 
          results: $.map(data, function(obj) { 
           return { id: obj.ime, text: obj.ime }; 
          }) 
         }; 
        } 
       } 
      }); 
     }); 

Wenn ich eine Stadt suche, erscheint nichts (Suche ... und nichts) mit dem Konsolenprotokoll Ich kann sehen, dass Daten dort und gut formatiert sind, aber die Städte werden nicht im Dropdown-Menü angezeigt. Ich denke, dass mein Problem mit meinem Javascript-Code und meinem Verständnis von select2 ist.

Grüße

UPDATE:

js:

  $(document).ready(function(){ 
      $(".select2").select2({ 
       placeholder: "Select city", 
       ajax: { 
        dataType: "json", 
        url: function (params) { 
         return '/city/' + params.term; 
        }, 
        processResults: function (data) { 
         return { 
          results: data.results //return data directly 
         }; 
        } 
       } 
      }); 
     }); 

Antwort

0

Ich denke, wenn die Daten transformieren Sie

return { id: obj.id, text: obj.text }; 

statt

return { id: obj.ime, text: obj.ime }; 
gesucht

Auch an der json suchen Sie Sie könnte wahrscheinlich gerade gebucht

tun (nicht getestet)
processResults: function (data) { 
    return { 
     results: data.results; 
    }; 
} 
+0

Danke, alles funktioniert jetzt. – napoleon