如何使用Ajax和Symfony显示数组

时间:2017-03-16 16:34:59

标签: arrays json ajax symfony

我正在尝试使用Ajax和json在symfony中显示一个包含数组的数组,这是我的ajax脚本:

    <script>
    var boton=document.getElementById("form_Boton");
    function ajax() {
        var nombre=$('#form_nombre').val();
        $.ajax({
            type: 'POST',
            url: "{{ path('buscar_porCriterio') }}",
            data: ({nombre: nombre}),
            dataType:"json",
            beforeSend:function () {
                alert("enviará a: "+nombre);
            },

            success:function (resp) {
                if(resp!=""){
                    $('#resultados').html(resp["nombre"]+" "+resp["apellido"]+" "+resp["residencia"]);
                }
                if(resp==""){
                    alert("NO SE ENCONTRO NADA");
                }


            }
        })
    }
    boton.addEventListener("click",ajax);

</script>

这是我的控制者:

public function PorCriterioAction(Request $request){
    if(!$request->isXmlHttpRequest())
    {
        throw new Exception("Error, NO ES AJAX");
    }
    $nombre=$request->request->get('nombre');
    $em=$this->getDoctrine()->getManager();
    $encontradas=$em->getRepository('FormulariosBundle:persona')->findBynombre($nombre);
    if ($encontradas == null) {
        $response = new Response("VACIO  " . $nombre . " Sorry");
        return $response;
    }
    else{
        $persona_encontrada = (array("id" => $encontradas->getId(),
            "nombre" => $encontradas->getNombre(),
            "apellido" => $encontradas->getApellido(),
            "residencia" => $encontradas->getResidencia()
        ));
        $response= new JsonResponse($persona_encontrada);
        return $response;}}

我需要的是从我的DB中获取名称为$ nombre的所有数据,并在我的div&#39; resultados&#39;中显示每个数据。但。当我意识到我的搜索时,symfony向我展示了这个异常: Exception

我的问题是:如何将该咨询的每个数据传递给我的div&#39; resultados&#39;?

如你所见,我想在一个div中显示这样的咨询,其id为&#34; resultados&#34;但是不起作用,你能帮帮我吗?我是symfony的初学者,我必须完成这个大学Proyect并完成我的学习,谢谢你的回答

编辑#2

这是对我的控制器的更改:

public function PorCriterioAction(Request $request){
    if(!$request->isXmlHttpRequest())
    {
        throw new Exception("Error, NO ES AJAX");
    }
    $nombre=$request->request->get('nombre');
    $em=$this->getDoctrine()->getManager();
    $encontradas=$em->getRepository('FormulariosBundle:persona')->findBynombre($nombre);
    if ($encontradas == null) {
        $response = new Response("VACIO  " . $nombre . " Sorry");
        return $response;
    }
    else{
        foreach ($encontradas as $Item){
            $persona_encontrada = (array("id" => $Item->getId(),
                "nombre" => $Item->getNombre(),
                "apellido" => $Item->getApellido(),
                "residencia" => $Item->getResidencia()
            ));
            array_push($persona_encontrada,$Item);
        }
            $response= new JsonResponse($persona_encontrada);

        return $response;
    }
}

这是你需要的吗? responseText

1 个答案:

答案 0 :(得分:0)

我相信$ encontradas是一个结果集,所以试试这个:

foreach( $encontradas as $item){
    $persona_encontrada = (array(
        "id" => $item->getId(),
        "nombre" => $item->getNombre(),
        "apellido" => $item->getApellido(),
        "residencia" => $item->getResidencia()
    ));
}

让我们知道结果。

编辑#2

我看到了问题。由于它遍历数组,您希望$persona_encontrada成为一个数组,然后使用PHP array_push向其中添加数组元素。你可以这样做:

$persona_encontrada = array();

foreach( $encontradas as $item){
    $element = array(
        "id" => $item->getId(),
        "nombre" => $item->getNombre(),
        "apellido" => $item->getApellido(),
        "residencia" => $item->getResidencia()
    );

    array_push( $persona_encontrada, $element);
}

顺便说一下,虽然这对你有用,但这可能不是做这样的事情的最好方法。但它会奏效。