在Symfony2中使用ajax自动完成

时间:2015-08-11 13:56:50

标签: jquery-ui symfony autocomplete

我使用jQueryUI自动填充来获取城市列表。我使用json数组来显示城市,但我无法让列表显示出来。

这是我的Ajax功能:

/**
 * @Route("/ajax", name="ajax")
 */
public function ajaxAction(Request $request)
{
    $value = $request->get('term');

    $em = $this->getDoctrine()->getEntityManager();
    $branches = $em->getRepository('AOFVHFlyBundle:City')
                  ->findByName($value);

    // Get branches by user if non-admin

    $json = array();
    foreach ($branches as $branch) {
        $json[] = array(
            'label' => sprintf('%s (%s)', $branch['name'], $branch['departement']),
            'value' => $branch['id']
        );
    }

    $response = new Response();
    // better way to return json - via header?
    $response->setContent(json_encode($json));

    return $response;
}

以下是表单输入:

    ->add('reqdeparture', 'genemu_jqueryautocompleter_entity', array(
        'class' => 'AOFVH\FlyBundle\Entity\City',
        'property' => 'name',
        'route_name' => 'ajax',
        'attr' => array(
            'placeholder'=>'Départ',
            'autocomplete' => 'on')
        ))

无论我在输入中输入什么,都不会出现任何内容。 知道为什么吗? (起初我以为是因为收集太大了,但我几乎没有50个城市)

1 个答案:

答案 0 :(得分:0)

您可以使用JsonResponse对象。 Content-Type标题将是' application / json'。 Symfony管理字符以自动转义,其他条件则返回正确规范化的JSON。

use Symfony\Component\HttpFoundation\JsonResponse;

/**
 * @Route("/ajax", name="ajax")
 */
public function ajaxAction(Request $request)
{
    $value = $request->get('term');

    $branches = $this->get("doctrine.orm.default_entity_manager")
                     ->getRepository("NamespaceMyBundle:Entity")
                     ->findByName($value);

    $json = array();
    foreach ($branches as $branch) {
        $json[] = array(…);
    }

    return new JsonResponse($json);
}