Diferència entre revisions de la pàgina «AJAX»
Salta a la navegació
Salta a la cerca
(Es crea la pàgina amb «=AJAX= <ol> <li>Ejecuta el siguiente código y explica como funciona. <pre class='prettyprint'> <!DOCTYPE html> <html> <head> <title>Hola Mundo con AJAX</title>...».) |
|||
(Hi ha 3 revisions intermèdies del mateix usuari que no es mostren) | |||
Línia 1: | Línia 1: | ||
− | = | + | '''volver a''' [[M06 Desarrollo web en entorno cliente]] |
+ | * Guía de referencia [https://www.w3schools.com/xml/ajax_intro.asp Ajax] | ||
+ | * Guía de referencia [http://api.jquery.com/jQuery.ajax/ Ajax en jQuery] | ||
+ | ==Ejercicios Ajax== | ||
<ol> | <ol> | ||
<li>Ejecuta el siguiente código y explica como funciona. | <li>Ejecuta el siguiente código y explica como funciona. | ||
Línia 160: | Línia 163: | ||
* En la caja de texto cabeceras HTTP de la respuesta del servidor se debe de mostrar las cabeceras de respuesta de la petición | * En la caja de texto cabeceras HTTP de la respuesta del servidor se debe de mostrar las cabeceras de respuesta de la petición | ||
* En código de estado se ha de mostrar el código y el texto del estado de la respuesta | * En código de estado se ha de mostrar el código y el texto del estado de la respuesta | ||
+ | </li> | ||
+ | </ol> | ||
+ | ==Ejercicios AJAX en jQuery== | ||
+ | <ol> | ||
+ | <li>Utilizando el siguiente código complétalo para que al clicar el botón "calcula" con una llamada AJAX en jQuery calcule la suma y devuelva el resultado. | ||
+ | *jq_ajax1.html | ||
+ | <pre class="prettyprint"> | ||
+ | <!DOCTYPE html> | ||
+ | <html> | ||
+ | <head> | ||
+ | <meta charset="utf-8" /> | ||
+ | <script type="text/javascript" src="../jquery-3.2.1.js"></script> | ||
+ | <script type="text/javascript"> | ||
+ | //asigna el valor de los inputs a variables para que las recoja el PHP | ||
+ | //Se realiza una llama AJAX al fichero jq_ajax1.php con los parametros y | ||
+ | //método post. Antes de enviar la llamada AJAX se ejecutará la función | ||
+ | //mostrarProcesando, si la llamada tiene éxito se ejecutará la función | ||
+ | // respuesta | ||
+ | function realizaProceso(valorCaja1, valorCaja2){ | ||
+ | var parametros = { | ||
+ | "valorCaja1" : valorCaja1, | ||
+ | "valorCaja2" : valorCaja2 | ||
+ | }; | ||
+ | |||
+ | $.ajax({}); | ||
+ | } | ||
+ | |||
+ | //En el span con id=resultado mostraremos el texto: "Procesando, espere por favor..." | ||
+ | function mostrarProcesando(){ | ||
+ | |||
+ | } | ||
+ | |||
+ | //El parámetro res ha de contener el resultado que se ha calculado en el PHP, | ||
+ | //por lo tanto en el span con id=resultado mostraremos el resultado de la suma | ||
+ | function respuesta(res){ | ||
+ | } | ||
+ | </script> | ||
+ | </head> | ||
+ | <body> | ||
+ | Introduce valor 1 | ||
+ | <input type="text" name="caja_texto" id="valor1" value="0"/> | ||
+ | Introduce valor 2 | ||
+ | <input type="text" name="caja_texto" id="valor2" value="0"/> | ||
+ | Realiza suma | ||
+ | <input type="button" href="javascript:;" onclick="realizaProceso($('#valor1').val(), $('#valor2').val());" value="Calcula"/> | ||
+ | <br/> | ||
+ | Resultado: <span id="resultado">0</span> | ||
+ | </body> | ||
+ | </html> | ||
+ | </pre> | ||
+ | * jq_ajax1.php | ||
+ | <pre class="prettyprint"> | ||
+ | <?php | ||
+ | $resultado = $_POST['valorCaja1'] + $_POST['valorCaja2']; | ||
+ | echo $resultado; | ||
+ | ?> | ||
+ | </pre> | ||
+ | </li> | ||
+ | <li>Utilizando el siguiente código y el método $.getJSON recoje los valores en el PHP y devuelvelos con formato JSON para pintarlos después de la linea horizontal | ||
+ | *jq_ajax2.html | ||
+ | <pre class="prettyprint"> | ||
+ | <!doctype html> | ||
+ | <html> | ||
+ | <head> | ||
+ | <meta charset="UTF-8"> | ||
+ | <title>Obtener JSON con AJAX</title> | ||
+ | </head> | ||
+ | |||
+ | <body> | ||
+ | <h1>Datos para enviar a PHP</h1> | ||
+ | |||
+ | <input type="text" id="nombre" placeholder="Nombre" accept="text/plain"><br><br> | ||
+ | <input type="text" id="apellido" placeholder="Apellido" accept="text/plain"><br><br> | ||
+ | <input type="number" id="edad" placeholder="Edad" accept="text/plain"> | ||
+ | |||
+ | <div class="enviar"><h3>Enviar</h3></div> | ||
+ | <hr> | ||
+ | <div class="respuesta"></div> | ||
+ | |||
+ | <script type="text/javascript" src="../jquery-3.2.1.js"></script> | ||
+ | <script> | ||
+ | $(function(){ | ||
+ | $(".enviar").click(enviarDatos); | ||
+ | }); | ||
+ | |||
+ | //obtener los valores de nombre, apellido y edad, construir una variable datos con el formato K:V, | ||
+ | // ej: datos = {"nombre":"lean"} | ||
+ | // usar la llamada getJSON | ||
+ | function enviarDatos(e){ | ||
+ | e.preventDefault(); | ||
+ | var nombre = $("#nombre").val(), | ||
+ | apellido = $("#apellido").val(), | ||
+ | edad = $("#edad").val(), | ||
+ | |||
+ | datos = {"nombre":nombre, "apellido":apellido,"edad":edad}; | ||
+ | |||
+ | $.getJSON("jq_ajax2.php",datos,mostrarRespuesta); | ||
+ | } | ||
+ | |||
+ | //Esta función se ejecutará cuando llegue la respuesta del servidor y tiene que pintar la información | ||
+ | //que devuelve el servidor (en este caso los datos que le hemos pasado en formato JSON | ||
+ | function mostrarRespuesta(res){ | ||
+ | } | ||
+ | </script> | ||
+ | </body> | ||
+ | </html> | ||
+ | </pre> | ||
+ | * jq_ajax2.php | ||
+ | <pre class="prettyprint"> | ||
+ | <?php | ||
+ | //Obtenemos los datos de los input | ||
+ | $nombre = $_REQUEST["nombre"]; | ||
+ | $apellido = $_REQUEST["apellido"]; | ||
+ | $edad = $_REQUEST["edad"]; | ||
+ | |||
+ | //Seteamos el header de "content-type" como "JSON" para que jQuery lo reconozca como tal | ||
+ | header('Content-Type: application/json'); | ||
+ | //Guardamos los datos en un array | ||
+ | $datos = array( | ||
+ | 'estado' => 'ok', | ||
+ | 'nombre' => $nombre, | ||
+ | 'apellido' => $apellido, | ||
+ | 'edad' => $edad | ||
+ | ); | ||
+ | //Devolvemos el array pasado a JSON como objeto | ||
+ | echo json_encode($datos, JSON_FORCE_OBJECT); | ||
+ | ?> | ||
+ | </pre> | ||
+ | </li> | ||
+ | <li>Dado el siguiente código utiliza la funcion .load() para cargar el resultado de los datos enviados desde la página | ||
+ | * jq_ajax3.html | ||
+ | <pre class="prettyprint"> | ||
+ | <html> | ||
+ | <head> | ||
+ | <title>Ajax Simple</title> | ||
+ | <script type="text/javascript" src="../jquery-3.2.1.js"></script> | ||
+ | <script> | ||
+ | //Hacemos click en "enlaceajax", cancelamos el evento click por defecto y en el div destino ejecutamos la función load | ||
+ | // pasandole la URL de destino, los parámetros para el servidor y una función para recibir info de la llamada | ||
+ | $(function(){ | ||
+ | }) | ||
+ | |||
+ | //pintamos el status de la llamada AJAX en el div "info" | ||
+ | function datosRecibidos(response, status){ | ||
+ | } | ||
+ | </script> | ||
+ | </head> | ||
+ | <body> | ||
+ | <p> | ||
+ | <label for="nombre">Introduce tu nombre</label> | ||
+ | <input name="nombre" type="text" /> | ||
+ | <br /> | ||
+ | <label for="edad">Introduce tu edad</label> | ||
+ | <input name="edad" type="number" /> | ||
+ | </p> | ||
+ | <a href="#" id="enlaceajax">Haz clic!</a> | ||
+ | <br> | ||
+ | <div id="destino"></div> | ||
+ | <br /> | ||
+ | <div id="info"> | ||
+ | </div> | ||
+ | </body> | ||
+ | </html> | ||
+ | </pre> | ||
+ | * jq_ajax3.php | ||
+ | <pre class="prettyprint"> | ||
+ | <br> | ||
+ | Nombre: <?php echo $_POST["nombre"];?> | ||
+ | <br> | ||
+ | Edad: <?php echo $_POST["edad"];?> | ||
+ | </pre> | ||
</li> | </li> | ||
</ol> | </ol> |
Revisió de 15:30, 30 ago 2018
volver a M06 Desarrollo web en entorno cliente
- Guía de referencia Ajax
- Guía de referencia Ajax en jQuery
Ejercicios Ajax
- Ejecuta el siguiente código y explica como funciona.
<!DOCTYPE html> <html> <head> <title>Hola Mundo con AJAX</title> <script type="text/javascript"> function descargaArchivo() { // Obtener la instancia del objeto XMLHttpRequest if(window.XMLHttpRequest) { peticion_http = new XMLHttpRequest(); } else if(window.ActiveXObject) { peticion_http = new ActiveXObject("Microsoft.XMLHTTP"); } // Preparar la funcion de respuesta peticion_http.onreadystatechange = muestraContenido; // Realizar peticion HTTP peticion_http.open('GET', 'http://localhost:8888/ejercicios_js/holamundo.txt', true); peticion_http.send(null); function muestraContenido() { if(peticion_http.readyState == 4) { if(peticion_http.status == 200) { alert(peticion_http.responseText); } } } } window.onload = descargaArchivo; </script> </head> <body></body> </html>
- Dada la siguiente refactorización del ejercicio anterior comenta los cambios
<!DOCTYPE html> <html> <head> <title>Hola Mundo con AJAX</title> <script type="text/javascript"> var READY_STATE_UNINITIALIZED=0; var READY_STATE_LOADING=1; var READY_STATE_LOADED=2; var READY_STATE_INTERACTIVE=3; var READY_STATE_COMPLETE=4; var HTTP_STATUS_OK = 200; var peticion_http; function cargaContenido(url, metodo, funcion) { peticion_http = inicializa_xhr(); if(peticion_http) { peticion_http.onreadystatechange = funcion; peticion_http.open(metodo, url, true); peticion_http.send(null); } } function inicializa_xhr() { if(window.XMLHttpRequest) { return new XMLHttpRequest(); } else if(window.ActiveXObject) { return new ActiveXObject("Microsoft.XMLHTTP"); } } function muestraContenido() { if(peticion_http.readyState == READY_STATE_COMPLETE) { if(peticion_http.status == HTTP_STATUS_OK) { alert(peticion_http.responseText); } } } function descargaArchivo() { cargaContenido("http://localhost/holamundo.txt", "GET", muestraContenido); } window.onload = descargaArchivo; </script> </head> <body></body> </html>
- Usando el código siguiente realiza los siguiente ejercicios:
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Ejercicios AJAX 3</title> <style type="text/css"> body { font: 13px Arial, Helvetica, sans-serif; } h2 { margin-bottom: 0; font-size: 1.2em; } #recurso, #enviar { padding: .3em; font-size: 1.2em; } #principal { float: left; width: 70%; } #secundario { float: right; width: 25%; } #contenidos, #estados, #cabeceras, #codigo { border: 2px solid #CCC; background: #FAFAFA; padding: 1em; white-space: pre; } #contenidos { min-height: 400px; max-height: 600px; overflow: scroll; } #estados { min-height: 200px; } #cabeceras { min-height: 200px; } #codigo { min-height: 100px; font-size: 1.5em; } </style> <script type="text/javascript"> </script> </head> <body> <form action="#"> URL: <input type="text" id="recurso" size="70" /> <input type="button" id="enviar" value="Mostrar contenidos" /> </form> <div id="principal"> <h2>Contenidos del archivo:</h2> <div id="contenidos"></div> <h2>Cabeceras HTTP de la respuesta del servidor:</h2> <div id="cabeceras"></div> </div> <div id="secundario"> <h2>Estados de la petición:</h2> <div id="estados"></div> <h2>Código de estado:</h2> <div id="codigo"></div> </div> </body> </html>
- En el input URL debe aparecer la URL de la propia página al cargar por primera vez
- Al clicar en el botón Mostrar Contenido mediante AJAX deberemos hacer una petición a la URL que haya en el input URL y cargar la respuesta en el apartado "Contenidos del archivo"
- En la caja de texto estados de la petición se debe mostrar en cada momento el estado actual de la petición
- En la caja de texto cabeceras HTTP de la respuesta del servidor se debe de mostrar las cabeceras de respuesta de la petición
- En código de estado se ha de mostrar el código y el texto del estado de la respuesta
Ejercicios AJAX en jQuery
- Utilizando el siguiente código complétalo para que al clicar el botón "calcula" con una llamada AJAX en jQuery calcule la suma y devuelva el resultado.
- jq_ajax1.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <script type="text/javascript" src="../jquery-3.2.1.js"></script> <script type="text/javascript"> //asigna el valor de los inputs a variables para que las recoja el PHP //Se realiza una llama AJAX al fichero jq_ajax1.php con los parametros y //método post. Antes de enviar la llamada AJAX se ejecutará la función //mostrarProcesando, si la llamada tiene éxito se ejecutará la función // respuesta function realizaProceso(valorCaja1, valorCaja2){ var parametros = { "valorCaja1" : valorCaja1, "valorCaja2" : valorCaja2 }; $.ajax({}); } //En el span con id=resultado mostraremos el texto: "Procesando, espere por favor..." function mostrarProcesando(){ } //El parámetro res ha de contener el resultado que se ha calculado en el PHP, //por lo tanto en el span con id=resultado mostraremos el resultado de la suma function respuesta(res){ } </script> </head> <body> Introduce valor 1 <input type="text" name="caja_texto" id="valor1" value="0"/> Introduce valor 2 <input type="text" name="caja_texto" id="valor2" value="0"/> Realiza suma <input type="button" href="javascript:;" onclick="realizaProceso($('#valor1').val(), $('#valor2').val());" value="Calcula"/> <br/> Resultado: <span id="resultado">0</span> </body> </html>
- jq_ajax1.php
<?php $resultado = $_POST['valorCaja1'] + $_POST['valorCaja2']; echo $resultado; ?>
- Utilizando el siguiente código y el método $.getJSON recoje los valores en el PHP y devuelvelos con formato JSON para pintarlos después de la linea horizontal
- jq_ajax2.html
<!doctype html> <html> <head> <meta charset="UTF-8"> <title>Obtener JSON con AJAX</title> </head> <body> <h1>Datos para enviar a PHP</h1> <input type="text" id="nombre" placeholder="Nombre" accept="text/plain"><br><br> <input type="text" id="apellido" placeholder="Apellido" accept="text/plain"><br><br> <input type="number" id="edad" placeholder="Edad" accept="text/plain"> <div class="enviar"><h3>Enviar</h3></div> <hr> <div class="respuesta"></div> <script type="text/javascript" src="../jquery-3.2.1.js"></script> <script> $(function(){ $(".enviar").click(enviarDatos); }); //obtener los valores de nombre, apellido y edad, construir una variable datos con el formato K:V, // ej: datos = {"nombre":"lean"} // usar la llamada getJSON function enviarDatos(e){ e.preventDefault(); var nombre = $("#nombre").val(), apellido = $("#apellido").val(), edad = $("#edad").val(), datos = {"nombre":nombre, "apellido":apellido,"edad":edad}; $.getJSON("jq_ajax2.php",datos,mostrarRespuesta); } //Esta función se ejecutará cuando llegue la respuesta del servidor y tiene que pintar la información //que devuelve el servidor (en este caso los datos que le hemos pasado en formato JSON function mostrarRespuesta(res){ } </script> </body> </html>
- jq_ajax2.php
<?php //Obtenemos los datos de los input $nombre = $_REQUEST["nombre"]; $apellido = $_REQUEST["apellido"]; $edad = $_REQUEST["edad"]; //Seteamos el header de "content-type" como "JSON" para que jQuery lo reconozca como tal header('Content-Type: application/json'); //Guardamos los datos en un array $datos = array( 'estado' => 'ok', 'nombre' => $nombre, 'apellido' => $apellido, 'edad' => $edad ); //Devolvemos el array pasado a JSON como objeto echo json_encode($datos, JSON_FORCE_OBJECT); ?>
- Dado el siguiente código utiliza la funcion .load() para cargar el resultado de los datos enviados desde la página
- jq_ajax3.html
<html> <head> <title>Ajax Simple</title> <script type="text/javascript" src="../jquery-3.2.1.js"></script> <script> //Hacemos click en "enlaceajax", cancelamos el evento click por defecto y en el div destino ejecutamos la función load // pasandole la URL de destino, los parámetros para el servidor y una función para recibir info de la llamada $(function(){ }) //pintamos el status de la llamada AJAX en el div "info" function datosRecibidos(response, status){ } </script> </head> <body> <p> <label for="nombre">Introduce tu nombre</label> <input name="nombre" type="text" /> <br /> <label for="edad">Introduce tu edad</label> <input name="edad" type="number" /> </p> <a href="#" id="enlaceajax">Haz clic!</a> <br> <div id="destino"></div> <br /> <div id="info"> </div> </body> </html>
- jq_ajax3.php
<br> Nombre: <?php echo $_POST["nombre"];?> <br> Edad: <?php echo $_POST["edad"];?>