Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/Distancia2018/Jaxon/conceptos»

De WikiEducator
Saltar a: navegación, buscar
(3.- Preparamos la solicitud en el cleinte y el espacio donde renderizar los datos que vengan del servidor)
(Usando jaxon en nuestro proyecto)
 
(9 revisiones intermedias por el mismo usuario no mostrado)
Línea 1: Línea 1:
{{:Usuario:ManuelRomero/ProgramacionWeb/Distancia2018/Jaxon/nav}}
+
[[Medio:Ejemplo.ogg]]{{:Usuario:ManuelRomero/ProgramacionWeb/Distancia2018/Jaxon/nav}}
{{__TEP__}}
+
<div id=parrafo>
  
 
===Qué es Ajax===
 
===Qué es Ajax===
Línea 57: Línea 57:
 
*Vamos a separar todo en ficheros independientes
 
*Vamos a separar todo en ficheros independientes
 
{{MRM_Actividad|
 
{{MRM_Actividad|
*Implementamos una aplicación con un formulario y una caja de texto
+
*Implementamos una aplicación con un texto en un div cuyo id se '''''div_saluda'''''
*Si hacemos un click realizaremos una llamada ajax para que nos visualice el contenido de la caja de texto en máyúscula
+
*Dentro de ese div tendremos un texto que diga
 +
Este texto es el original de la página
 +
*Tendremos un botón llamado '''''acutaliza texto'''''
 +
*al presionarlo cambiará el texto anterior por
 +
texto actualizado por el servidor mediante llamada ajax, el resto de la página no se actualiza
 
}}
 
}}
 +
<br />
 
*Para proceder en este proyecto hemos de implementar acciones tanto en el cliente como en el servidor
 
*Para proceder en este proyecto hemos de implementar acciones tanto en el cliente como en el servidor
 
*Este planteaminto es genérico o común independientemente de lo que usemos para construir el escenario ''''ajax''''
 
*Este planteaminto es genérico o común independientemente de lo que usemos para construir el escenario ''''ajax''''
Línea 68: Línea 73:
  
 
====La parte del cliente====
 
====La parte del cliente====
 +
<br />
 
;Usando jaxon para escribir script en el cliente para que funcione la solicitud ajax
 
;Usando jaxon para escribir script en el cliente para que funcione la solicitud ajax
 
#1.- primero preparamos el código javascript en la página del cliente
 
#1.- primero preparamos el código javascript en la página del cliente
Línea 73: Línea 79:
 
#3.- Preparamos la solicitud en el cleinte y el espacio donde renderizar los datos que vengan del servidor
 
#3.- Preparamos la solicitud en el cleinte y el espacio donde renderizar los datos que vengan del servidor
 
=====1.- primero preparamos el código javascript en la página del cliente=====
 
=====1.- primero preparamos el código javascript en la página del cliente=====
 +
<br />
 
{{MRM_Actividad|Title=1.1-creamos el objeto jaxon|
 
{{MRM_Actividad|Title=1.1-creamos el objeto jaxon|
 
<source lang=php>
 
<source lang=php>
Línea 111: Línea 118:
 
</source>
 
</source>
 
}}
 
}}
 +
<br />
 
*Si ejecutamos ahora el proyecto vemos que no sale nada ya que no hemos generado ninguna salida
 
*Si ejecutamos ahora el proyecto vemos que no sale nada ya que no hemos generado ninguna salida
 
*Sin embargo si vemos el código fuente, podremos ver todo el código
 
*Sin embargo si vemos el código fuente, podremos ver todo el código
Línea 122: Línea 130:
 
  */
 
  */
 
require_once "vendor/autoload.php";
 
require_once "vendor/autoload.php";
// Obtenemos un objeto de la clase jaxon a traveś de un método que nos devuelve un objeto jaxon
+
// Obtenemos un objeto de la clase jaxon a través de un método que nos devuelve un objeto '''''jaxon'''''
 
$jaxon = jaxon();
 
$jaxon = jaxon();
 
?>
 
?>
Línea 238: Línea 246:
  
 
=====2.- Preparamos los métodos en el servidor que van a ser invocados por ajax=====
 
=====2.- Preparamos los métodos en el servidor que van a ser invocados por ajax=====
*Creamos un fichero llamado '''''servidor.php''''' , lo podríamos hacer en el mismo index.php, pero por separar en ficheros los contenidos
+
*Creamos un fichero llamado '''''RespuestaAjax.php''''' , lo podríamos hacer en el mismo index.php, pero por separar en ficheros los contenidos
 
{{MRM_Actividad|Title=2.1-Indicamos que usamos la clase  Response de jaxon|
 
{{MRM_Actividad|Title=2.1-Indicamos que usamos la clase  Response de jaxon|
 
<source lang=php>
 
<source lang=php>
 
<?php
 
<?php
 +
<?php
 +
/**
 +
* Created by PhpStorm.
 +
* User: manuel
 +
* Date: 16/04/19
 +
* Time: 17:02
 +
*/
 +
 +
//Especificamos la clase que vamos a usar (psr-4)
 +
use Jaxon\Response\Response;
 +
 
<?php
 
<?php
 
/**
 
/**
Línea 260: Línea 279:
 
  * devuelve meditane un objeto Response datos al cliente
 
  * devuelve meditane un objeto Response datos al cliente
 
  */
 
  */
class Respuesta_Ajax{
+
class RespuestaAjax{
 
     /**
 
     /**
 
     * emite un mensaje de saludo
 
     * emite un mensaje de saludo
 
     */
 
     */
 
     public function saluda(){
 
     public function saluda(){
         $msj="Hola desde el servidor";
+
         $msj="texto actualizado por el servidor mediante llamada ajax, el resto de la página no se actualiza
        $response = new Response();
+
";
         $response->alert("ahora llegarán datos del servidor");
+
      $response = new Response();
         $response->assign('div_saludo', 'innerHTML', $msj)
+
         $response->alert("Van a venir nuevos datos");
        return $response;
+
         $response->assign('div_saluda', 'innerHTML', $msj);
    }
+
 
+
    /**
+
    * @param $user un string
+
    * Valida un usuario, en este caso que sea "admin" o no
+
    */
+
    public function valida($user){
+
        if ($user =="admin")
+
            $msj="El usuario está validado";
+
        else
+
            $msj="Usuario no válido vuelva a insertar";
+
        $response = new Response();
+
        $response->assign('div_valida', 'innerHTML', $msj)
+
        return $response;
+
    }
+
 
+
    /**
+
    * @param $color red o green
+
    * va a cambiar el color red por green o al revés
+
    * para ponerlo de fondo a un determinado div
+
    */
+
    public function cambia_color($color){
+
        $color = $color=="red" ? "green": "red";
+
        $response = new Response();
+
        $response->assign('div_color', 'backgroud', $msj)
+
 
         return $response;
 
         return $response;
 
     }
 
     }
  
 +
}
 
?>
 
?>
</body>
 
 
</source>
 
</source>
 
}}
 
}}
  
=====3.- Preparamos la solicitud en el cleinte y el espacio donde renderizar los datos que vengan del servidor=====
+
=====3.- Preparamos la solicitud en el cliente y el espacio donde renderizar los datos que vengan del servidor=====
 
<br />
 
<br />
{{MRM_Actividad|Title=1.3-Escribimos el código javascript para enviar las solicitudes XMLHttpRequest|
+
{{MRM_Actividad|Title=1.3-Escribimos el código en el index.php|
*En el html, mejor en cabecera cargamos los estilos propios de jaxon
+
*De esta forma dispondremos en el cliente los métodos en javascript para realizar las llamadas al servidor a través de solicitudes XMLHttpRequest
*Ahora debemos generar los eventos en javascript para invocar a los métodos del servidor+
+
*Los métodos específicos consisten en registrar la clase con lo que todos los métodos quedan disponibles
*Debemos especificar la sección html dónde que actulizarán  según la especificación del servidor
+
*Posteriormente llamamos al motor de  procesamiento de jaxon para dejar disponibles los métodos desde el cliente y atenderlos en el servidor
<source lang=html5>
+
<source lang=php>
.....
+
require_once("RespuestaAjax.php");
</body>
+
// Register an instance of the class with Jaxon
 +
$jaxon->register(Jaxon::CALLABLE_OBJECT, new RespuestaAjax());
 +
// Call the Jaxon processing engine
 +
$jaxon->processRequest();
 +
</source>
 +
}}
 +
 
 +
=====4.- Generemos los eventos en javascript para realizar las llamadas=====
 +
*Ahora simplemente lo que hacemos es crear un evento en java script para solicitar el evento del servidor
 +
*Por otro lado preparamos el espacio en el html del cliente donde queremos que se rendericen los datos que vengan del servidor
 +
*El código completo del cliente quedaría
 +
<source lang=php>
 
<?php
 
<?php
// Insert the Jaxon javascript code into the page
+
/**
echo $jaxon->getJs();
+
* Created by PhpStorm.
echo $jaxon->getScript();
+
* User: manuel
 +
* Date: 15/04/19
 +
* Time: 16:57
 +
*/
 +
require_once "vendor/autoload.php";
 +
require_once "RespuestaAjax.php";
 +
use Jaxon\Jaxon;
 +
use Jaxon\Response\Response;
 +
// Obtenemos un objeto de la clase jaxon a traveś de un método que nos devuelve un objeto jaxon
 +
$jaxon = jaxon();
 +
// Register an instance of the class with Jaxon
 +
$jaxon->register(Jaxon::CALLABLE_OBJECT, new RespuestaAjax());
 +
// Call the Jaxon processing engine
 +
$jaxon->processRequest();
 
?>
 
?>
</body>
+
 
 +
<!doctype html>
 +
<html lang="en">
 +
<  head>
 +
    <meta charset="UTF-8">
 +
    <meta name="viewport"
 +
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
 +
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
 +
    <title>Document</title>
 +
    <?= $jaxon->getCss() //<!--  // Insert the Jaxon CSS code into the page    ?>
 +
  </head>
 +
  <script>
 +
    function ajax_saluda() {
 +
        JaxonRespuestaAjax.saluda();
 +
        return false;
 +
    }
 +
  </script>
 +
 
 +
  <body>
 +
    <h1>Tenemos tres botones que harán solicitud de ajax al servidor</h1>
 +
    <h3>Aquí aparecerá el saludo cuando hagamos click saluda</h3>
 +
    <div id='div_saluda'>
 +
    </div>
 +
    <button onclick='ajax_saluda();'> Saluda</button>
 +
    <?php
 +
    // Insert the Jaxon javascript code into the page
 +
        echo $jaxon->getJs();
 +
        echo $jaxon->getScript();
 +
    ?>
 +
  </body>
 +
</html>
 +
 
 
</source>
 
</source>
 +
 +
{{MRM_Notas|
 +
*El nombre de la clase que implementa los métodos no debe tener el caracter _
 
}}
 
}}
 +
</div>

Última revisión de 05:06 18 abr 2019

Medio:Ejemplo.ogg


Qué es Ajax

AJAX, siglas que referncian a JavaScript y XML Asíncrono.



Icon define.gif
Que es Ajax
  • Es una Tecnología que va a permitir que el cliente haga una solicitud de datos al servidor. Al ser recibida por el cliente, hace que éste actualice parte de la página desde donde se solicitó manteniendo intacta el resto de la misma.



Icon activity.jpg
Algunas precisiones
  • Ajax' más que una tecnología es una técnica que combina varias tecnologías existentes hace muchos muchos años
  1. HTML
  2. CSS
  3. DOM
  4. XMLHttpRequest
  5. XML
  6. Javascript




  • En el proceso vemos que hay una serie de pasos o acciones
  1. Cliente solicita algo (evento javascript que hace una solicitud al servidor)
  2. El servidor recibe la solicitud y empaqueta datos en formato xml que entrega al cliente
  3. El cliente recibe los datos y con ellos se actualiza parte de la página
  • En la imagen siguiente podemos ver el proceso de la relaciónentre cliente y servidor

Funcionamiento ajax.png

Dónde se espcefician el código para que esto funcione

  • Realmente esta es una cuestión que hay que pensar un momento para no crear confusión

Siempre que usemos esta tecnología necesitamos que los mismos elementos estén en acción


Icon key points.gif

Escenario Ajax

  1. Evento de java script que va a hacer la solicitud
  2. Método en el servidor que atiende dicha solicitud
  3. El servidor entrega xml al cliente con el resultado de la solicitud
  4. El cliente renderiza parte de la página con los datos que recibe si procede


  • Este escenario lo podemos implementar con diferentes tecnologías.
  • Como hemos visto anteriormente lo que nos faltaría es saber como se comunia cliente servidor y servidor cliente para enviar/recibir la solicud/datos

Ajax cliente servidor.png

  • Como vemos en la imagen la comunicación entre cliente y servidor utiliza un objeto XMLHttpRequest
  • Para facilitar el trabajo de acceder directamente al objeto, se utilizan framework como nos ofrece jquery, react, vue, ...
  • También hay librerías que desde php podemos establecer este escenario
  • Nosotros vamos a hacerlo con jaxon una librería que actualiza xajax proyecto que se abandonó ante la nueva versión de php 7.x

Jaxon

  • La página la tenemos en


Icon key points.gif

Instalción

  • Usando composer
composer require jaxon-php/jaxon-core:~2.0


  • Una vez instalado vemos que en el directorio actual ha creado una carpeta jaxon-php/jaxon-core donde se ubica todos los fuentes de nuestra librería

App1 ajax.png

  • Vamos a ver su funcionamiento práctico, si bien tenemos muchas funcionalidades incluso podemos usar jquery como un método del objeto jaxon, pero para eso, personalmente pienso que es mejor usar jquery o bien nuevos y más potentes framworks como Vue o React.

Usando jaxon en nuestro proyecto

  • Vamos a separar todo en ficheros independientes


Icon activity.jpg
Actividad
  • Implementamos una aplicación con un texto en un div cuyo id se div_saluda
  • Dentro de ese div tendremos un texto que diga
Este texto es el original de la página
  • Tendremos un botón llamado acutaliza texto
  • al presionarlo cambiará el texto anterior por
texto actualizado por el servidor mediante llamada ajax, el resto de la página no se actualiza




  • Para proceder en este proyecto hemos de implementar acciones tanto en el cliente como en el servidor
  • Este planteaminto es genérico o común independientemente de lo que usemos para construir el escenario 'ajax'

1.-La parte del servidor 2.-La parte del cliente

La parte del servidor

Iniciamos el objeto jaxon para preparar el entorno

La parte del cliente


Usando jaxon para escribir script en el cliente para que funcione la solicitud ajax
  1. 1.- primero preparamos el código javascript en la página del cliente
  2. 2.- Preparamos los métodos en el servidor que van a ser invocados por ajax
  3. 3.- Preparamos la solicitud en el cleinte y el espacio donde renderizar los datos que vengan del servidor
1.- primero preparamos el código javascript en la página del cliente



Icon activity.jpg
1.1-creamos el objeto jaxon
<?php
//Usamos composer para cagar los ficheros necesarios para usar los métodos de diferentes clases
require_once "vendor/autoload.php";
 
// Obtenemos un objeto de la clase jaxon a traveś de un método que nos devuelve un objeto jaxon
$jaxon = jaxon(); //método ubicado en el fichero vendor/jaxon-php/jaxon-core/src/start.php
?>





Icon activity.jpg
1.2-Cargamos estilos de jaxon (opcional)
  • En el html, mejor en cabecera cargamos los estilos propios de jaxon
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <?=$jaxon->getCss() // Insert the Jaxon CSS code into the page?>
</head>





Icon activity.jpg
1.3-Escribimos el código javascript para enviar las solicitudes XMLHttpRequest
  • En el html, mejor en cabecera cargamos los estilos propios de jaxon
.....
</body>
<?php
// Insert the Jaxon javascript code into the page
echo $jaxon->getJs();
echo $jaxon->getScript();
?>
</body>




  • Si ejecutamos ahora el proyecto vemos que no sale nada ya que no hemos generado ninguna salida
  • Sin embargo si vemos el código fuente, podremos ver todo el código
<?php
/**
 * Created by PhpStorm.
 * User: manuel
 * Date: 15/04/19
 * Time: 16:57
 */
require_once "vendor/autoload.php";
// Obtenemos un objeto de la clase jaxon a través de un método que nos devuelve un objeto '''''jaxon'''''
$jaxon = jaxon();
?>
 
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <?=$jaxon->getCss() //<!--   // Insert the Jaxon CSS code into the page?>
</head>
<body>
<?php
// Insert the Jaxon javascript code into the page
echo $jaxon->getJs();
echo $jaxon->getScript();
?>
</body>
</html>
  • Genera la siguiente salida
2.- Preparamos los métodos en el servidor que van a ser invocados por ajax
  • Creamos un fichero llamado RespuestaAjax.php , lo podríamos hacer en el mismo index.php, pero por separar en ficheros los contenidos


Icon activity.jpg
2.1-Indicamos que usamos la clase Response de jaxon
<?php
<?php
/**
 * Created by PhpStorm.
 * User: manuel
 * Date: 16/04/19
 * Time: 17:02
 */
 
//Especificamos la clase que vamos a usar (psr-4)
use Jaxon\Response\Response;
 
<?php
/**
 * Created by PhpStorm.
 * User: manuel
 * Date: 16/04/19
 * Time: 17:02
 */
 
//Especificamos la clase que vamos a usar (psr-4)
use Jaxon\Response\Response;
 
/**
 * Class Respuesta_Ajax
 * creamos una clase cuyos métodos van a ser
 * las accinoes que el cliente puede solicitar por ajax
 * el servidor solo ejecuta ese método
 * devuelve meditane un objeto Response datos al cliente
 */
class RespuestaAjax{
    /**
     * emite un mensaje de saludo
     */
    public function saluda(){
        $msj="texto actualizado por el servidor mediante llamada ajax, el resto de la página no se actualiza
";
       $response = new Response();
        $response->alert("Van a venir nuevos datos");
        $response->assign('div_saluda', 'innerHTML', $msj);
        return $response;
    }
 
}
?>




3.- Preparamos la solicitud en el cliente y el espacio donde renderizar los datos que vengan del servidor



Icon activity.jpg
1.3-Escribimos el código en el index.php
  • De esta forma dispondremos en el cliente los métodos en javascript para realizar las llamadas al servidor a través de solicitudes XMLHttpRequest
  • Los métodos específicos consisten en registrar la clase con lo que todos los métodos quedan disponibles
  • Posteriormente llamamos al motor de procesamiento de jaxon para dejar disponibles los métodos desde el cliente y atenderlos en el servidor
require_once("RespuestaAjax.php");
// Register an instance of the class with Jaxon
$jaxon->register(Jaxon::CALLABLE_OBJECT, new RespuestaAjax());
// Call the Jaxon processing engine
$jaxon->processRequest();




4.- Generemos los eventos en javascript para realizar las llamadas
  • Ahora simplemente lo que hacemos es crear un evento en java script para solicitar el evento del servidor
  • Por otro lado preparamos el espacio en el html del cliente donde queremos que se rendericen los datos que vengan del servidor
  • El código completo del cliente quedaría
<?php
/**
 * Created by PhpStorm.
 * User: manuel
 * Date: 15/04/19
 * Time: 16:57
 */
require_once "vendor/autoload.php";
require_once "RespuestaAjax.php";
use Jaxon\Jaxon;
use Jaxon\Response\Response;
// Obtenemos un objeto de la clase jaxon a traveś de un método que nos devuelve un objeto jaxon
$jaxon = jaxon();
// Register an instance of the class with Jaxon
$jaxon->register(Jaxon::CALLABLE_OBJECT, new RespuestaAjax());
// Call the Jaxon processing engine
$jaxon->processRequest();
?>
 
<!doctype html>
<html lang="en">
<  head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <?= $jaxon->getCss() //<!--   // Insert the Jaxon CSS code into the page    ?>
  </head>
  <script>
    function ajax_saluda() {
        JaxonRespuestaAjax.saluda();
        return false;
    }
  </script>
 
  <body>
    <h1>Tenemos tres botones que harán solicitud de ajax al servidor</h1>
    <h3>Aquí aparecerá el saludo cuando hagamos click saluda</h3>
    <div id='div_saluda'>
    </div>
    <button onclick='ajax_saluda();'> Saluda</button>
    <?php
    // Insert the Jaxon javascript code into the page
        echo $jaxon->getJs();
        echo $jaxon->getScript();
    ?>
  </body>
</html>

Plantilla:MRM Notas