Integrar Ajax en Zend Framework 2

Podemos utilizar Ajax en Zend Framework 2 de forma similar a como lo haríamos en otros frameworks. En Zend contamos con algunas funciones específicas para trabajar con Ajax. Veamos un ejemplo.

La vista que hará la petición AJAX al dar click a un botón.

<script>
$(document).ready(inicio);
function inicio(){
var x=$(".cargar");
x.click(cargar);
    function cargar(){
        $.ajax({
        async: true,
        type: "POST",
        url: "<?=$this->basePath("crud/usuariosajax")?>",
        success: function(datos){
            $("#usuarios").html(datos);
        }
        }); 
        return false;
    }

}
</script>
<h1>Probando AJAX con ZF2</h1>
<button class="cargar">Cargar</button>
<div id="usuarios"></div>

El controlador

public function usuariosAjaxAction(){
	/*Comprobamos si la petición es por AJAX 
	y si no lo es nos redirige a otra pagina*/
	if($this->request->isXmlHttpRequest()){

	   $this->dbAdapter=$this->getServiceLocator()->get('Zend\Db\Adapter');
	   $usuarios=new UsuariosModel($this->dbAdapter);
	   
	   //Llamamos a un metodo del modelo
	   $todos=$usuarios->listarTodos();
	   
	   //Cargamos la vista usuariosajax.phtml
	   $vista = new ViewModel(array(
		 'todos'=>$todos
			 ));
		/* Le indicamos que será una vista sin plantilla,
		es decir, no cargará todo el contenido de la plantilla
		sino que solo cargará los datos que imprima
		*/
		$vista->setTerminal(true);
		return $vista;
	}else{
		return $this->redirect()->toUrl($this->getRequest()->getBaseUrl());  
	}
}

La vista que vendrá por Ajax
Usuariosajax.phtml

<?php
var_dump($this->todos);
?>

Víctor Robles WEB

Autor: Victor

Desarrollador web - Formador online - Blogger

Compartir este post

9 Comentarios

  1. Querido muy bueno, pero el modelo? donde esta el metodo listartodos

    Responder
    • El modelo lo creé en otro de los tutoriales. Un saludo.

      Responder
  2. Viejo gracias el código es entendible y de buen aporte…ey tío, buscaba una página en español que me ayudará con zend2. Saludos desde Colombia

    Responder
  3. Me encanta tu página, me está ayudando a profundizar en ZF2 de manera directa y rápida.
    Me ha surgido una duda/problema y te la comento por si puedes aclarármelo.
    Tengo un proceso de creación de un PDF (con DOMPDF) en una acción del controlador … el tema es que he pensado en mostrar el progreso de creación con ajax (a no ser que veas un método más óptimo), de modo que durante la creación del pdf se va actualizando una variable publica $progreso y quiero que se esté mostrando su valor en la vista durante el proceso. He probado pero no muestra hasta que el pdf se ha entregado.
    Ambos actions están en el mismo controller.
    ¿Algún consejo?
    Muchas gracias y te animo a seguir añadiendo contenido a ZF2 … es imprescindible!!
    enhorabuena por este estupendo trabajo.

    Responder
    • Supongo que podrías hacer es un que se lanzará una petición Ajax cada cierto intervalo de tiempo que te actualice el valor del progreso. Aunque yo no me complicaría y le pondria una imágen tipo loader hasta que se acabe de generar el PDF.

      En unos días voy a sacar un Curso de Zend Framework 2 con contenidos más optimizados y más avanzados.

      Espero haberte ayudado, un saludo 😉

      Responder
      • También lo pensé pero creo que no es el mejor camino, y de hecho estoy planteandome utilizar una Zend ProgressBar, de modo que el valor vaya siendo actualizado en el controlador y reflejado al tiempo en la progress bar. En fin … sigo en ello.
        Por supuesto que has sido y estás siendo de mucha ayuda …
        Muchas gracias … estoy impaciente por «devorar» tus siguientes entregas.
        Hasta pronto.

        Responder
      • Haz el favor de ponerme un ejemplo como el que comentas de mostrar una imagen hasta que genere el pdf … porque incluso he intentado con variables de sesión y nada … siempre me lo muestra como finalizado desde un principio o nada hasta el final, dependiendo de si tengo async en true o false.

        Muchas gracias Victor

        Responder
        • En el div donde pones tu barra de progreso pones un loader.gif (puedes buscar este tipo de imágenes por ahí) y cuando el AJAX de success ocultas esa imagen con un hide().

          Creo que no llegas a entender bien como funciona AJAX, pero no se.

          Si no sabes muy bien como va ajax tengo un curso gratuito sobre como crear un API REST y como usarla con AJAX que igual la parte de AJAX te puede ayudar, te dejo el link https://www.tutellus.com/tecnologia/desarrollo-web/crear-un-api-restful-con-slim-php-y-usarla-con-ajax-6129

          Un saludo, crack 😉

          Responder
  4. Hola, tengo una consulta, estoy trabajando con ajax para enviar datos al controller, muy similar a tu ejemplo solo que le coloco dataType: ‘json’, para enviarlo con JSON y le coloco en la opción data la información a enviar, todo funciona bien con textos pequeños pero cuando son textos un poco mas grandes (50 palabras en adelante) me lanza un error: Internal Server Error status: error. Hasta donde tengo entendido json admite bastante peso en los datos que envia por lo que no se si se daba a un tema de configuración pero no logro localizarlo, sabes algo acerca de esto?

    Responder

Poner un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *