Zend Framework - Ajax

AJAX es una tecnología moderna en programación web. Proporciona opciones para enviar y recibir datos en una página web de forma asincrónica, sin actualizar la página. Zend framework ofrece una opción para trabajar conjson modelo a través zend-view y zend-jsoncomponente. Aprendamos la programación Zend AJAX en este capítulo.

Instalar el componente json

El componente Zend json se puede instalar utilizando el Composer comando como se especifica a continuación -

composer require zendframework/zend-json

Concepto

Zend framework proporciona dos métodos para escribir fácilmente una aplicación web habilitada para AJAX. Son los siguientes:

  • los isXmlHttpRequest() método en el Requestobjeto: si se realiza una solicitud AJAX, el método isXmlHttpRequest () del objeto de solicitud devuelve verdadero; de lo contrario, falso. Este método se usa para manejar una solicitud AJAX correctamente en el lado del servidor.

if ($request->isXmlHttpRequest()) { 
   // Ajax request 
} else { 
   // Normal request 
}
  • Zend / View / Model / JsonModel - El JsonModel es una alternativa para ViewModelpara ser utilizado exclusivamente para AJAX y los escenarios de API REST. El JsonModel junto conJsonStrategy (que se configurará en el bloque del administrador de vistas del módulo) codifica los datos del modelo en Json y lo devuelve como respuesta en lugar de vistas (phtml).

AJAX - Ejemplo de trabajo

Agreguemos una nueva página ajax, ajaxen el módulo de tutorial y obtener la información del libro de forma asincrónica. Para hacer esto, debemos seguir los siguientes pasos.

Paso 1: agregue JsonStrategy en la configuración del módulo

Actualice el bloque del administrador de vistas en el archivo de configuración del módulo del tutorial: myapp / module / Tutorial / config / module.config.php. Luego,JsonStrategy trabajará con JsonModel para codificar y enviar los datos json.

'view_manager' => [ 
   'template_map' => array
      ('layout/layout' => __DIR__ . '/../view/layout/newlayout.phtml'), 
   'template_path_stack' => [ 
      'tutorial' => __DIR__ . '/../view', 
   ], 
   'strategies' => array('ViewJsonStrategy',), 
],

Paso 2: agregue el método ajaxAction en TutorialController.php

Agregue el método ajaxAction en TutorialController.php con el siguiente código:

public function ajaxAction() { 
   $data = $this->bookTable->fetchAll(); 
   $request = $this->getRequest(); 
   $query = $request->getQuery();  
   if ($request->isXmlHttpRequest() || $query->get('showJson') == 1) { 
      $jsonData = array(); 
      $idx = 0; 
      foreach($data as $sampledata) { 
         $temp = array( 
            'author' => $sampledata->author, 
            'title' => $sampledata->title, 
            'imagepath' => $sampledata->imagepath 
         );  
         $jsonData[$idx++] = $temp; 
      } 
      $view = new JsonModel($jsonData); 
      $view->setTerminal(true); 
   } else { 
      $view = new ViewModel(); 
   }  
   return $view; 
}

Aquí, ajaxAction comprobará si la solicitud entrante es AJAX o no. Si la solicitud entrante es AJAX, entonces elJsonModelse creará. De lo contrario, unViewModel se creará.

En ambos casos, la información del libro se obtendrá de la base de datos y se completará en el modelo. Si el modelo es un JsonModel, entoncesJsonStrategy se invocará y codificará los datos como json y los devolverá como respuesta.

los $query->get('showJson') == 1se utiliza con fines de depuración. Solo agregashowJson=1 en la url y la página mostrará los datos json.

Paso 3: agregue ajax.phtml

Ahora, agregue el script de vista ajax.phtmlpara el método ajaxAction. Esta página tendrá un enlace con la etiqueta -Load book information.

Al hacer clic en ese enlace, se realizará una solicitud AJAX, que obtendrá la información del libro como datos Json y mostrará la información del libro como una tabla formateada. El procesamiento AJAX se realiza utilizando elJQuery.

La lista completa de códigos es la siguiente:

<a id = "loadbook" href = "#">Load book information</a> 
</br> </br> 

<table class = "table"> 
   <tbody id = "book"> 
   </tbody> 
</table>  

<script language = "javascript"> 
$(document).ready(function(){  
   $("#loadbook").on("click", function(event){ 
      $.ajax({ 
         url:        '/tutorial/ajax', 
         type:       'POST',  
         dataType:   'json', 
         async:      true, 
         
         success: function(data, status) { 
            var e = $('<tr><th>Author</th><th>Title</th><th>Picture</th></tr>'); 
            $('#book').html(''); 
            $('#book').append(e); 
            
            for(i = 0; i < data.length; i++) { 
               book = data[i]; 
               var e = $('<tr><td id = "author"></td><td id = "title"></td>
               <td id="imagepath"><img src = ""/></td></tr>'); 
               $('#author', e).html(book['author']); 
               $('#title', e).html(book['title']); 
               $('#imagepath img', e).attr('src', book['imagepath']); 
               $('#book').append(e); 
            } 
         }, 
         error : function(xhr, textStatus, errorThrown) { 
            alert('Ajax request failed.'); 
         } 
      }); 
   }); 
}); 
</script>

Paso 4: ejecuta la aplicación

Finalmente, ejecute la aplicación - http://localhost:8080/tutorial/ajax y haga clic en el enlace Cargar información del libro.

El resultado será el que se muestra a continuación:

Ajax Page -

Ajax Page with Book Information

Ajax page with debugging information