Diferencia entre revisiones de «Usuario:Juanda/jQuery/Ajax»
De WikiEducator
(→¿Qué es AJAX?) |
(→Cachear AJAX) |
||
(30 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 8: | Línea 8: | ||
<div class="slide"> | <div class="slide"> | ||
− | |||
=== JSON === | === JSON === | ||
* '''J'''ava'''S'''cript '''O'''bject '''N'''otation | * '''J'''ava'''S'''cript '''O'''bject '''N'''otation | ||
Línea 18: | Línea 17: | ||
//Objeto JSON: | //Objeto JSON: | ||
{ "nombre":"Pepe" , "apellido":"Pérez" } | { "nombre":"Pepe" , "apellido":"Pérez" } | ||
− | + | </source> | |
+ | </div> | ||
+ | <div class="slide"> | ||
+ | <source lang="javascript"> | ||
//Array JSON | //Array JSON | ||
{ | { | ||
Línea 36: | Línea 38: | ||
</div> | </div> | ||
<div class="slide"> | <div class="slide"> | ||
+ | |||
===¿Qué es AJAX?=== | ===¿Qué es AJAX?=== | ||
*AJAX quiere decir Asynchronous JavaScript and XML. | *AJAX quiere decir Asynchronous JavaScript and XML. | ||
Línea 47: | Línea 50: | ||
<div class="slide"> | <div class="slide"> | ||
+ | ===Cachear AJAX=== | ||
+ | <source lang="javascript"> | ||
+ | $.ajaxSetup ({ | ||
+ | cache: false | ||
+ | }); | ||
+ | </source> | ||
+ | *Será útil usar caché solamente con contenidos estáticos. | ||
+ | *Es aconsejable indicarlo porque el comportamiento por defecto puede variar en función del navegador. | ||
+ | *La caché solo funciona mediante GET. | ||
+ | </div> | ||
− | = | + | <div class="slide"> |
− | + | ||
− | Ejemplo: | + | ===Método load=== |
+ | * Es el método más sencillo. Lo usaremos para cargar cierto contenido por AJAX al DOM de la página actual. | ||
+ | <source lang="javascript"> | ||
+ | $(selector).load(URL,data,callback); | ||
+ | </source> | ||
+ | *Se puede especificar un selector jQuery a la URL: | ||
+ | <source lang="javascript"> | ||
+ | $("#div1").load("demo_test.txt #p1"); | ||
+ | </source> | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | ====Ejemplo de uso==== | ||
+ | *Petición de contenido vía ajax al pulsar un enlace: | ||
<source lang="html4strict"> | <source lang="html4strict"> | ||
− | + | <html> | |
− | <html> | + | |
<head> | <head> | ||
− | <script src="jquery.js"></script> | + | <title>Ajax Simple</title> |
+ | <script src="jquery-1.8.2.min.js" type="text/javascript"></script> | ||
<script> | <script> | ||
$(document).ready(function(){ | $(document).ready(function(){ | ||
− | + | $("#enlaceajax").click(function(evento){ | |
− | + | evento.preventDefault(); | |
− | + | $("#destino").load("contenido-ajax.html"); | |
− | }) | + | }); |
+ | }) | ||
</script> | </script> | ||
</head> | </head> | ||
<body> | <body> | ||
− | < | + | <a href="#" id="enlaceajax">Haz clic!</a> |
− | < | + | <br> |
+ | <div id="destino"></div> | ||
</body> | </body> | ||
Línea 74: | Línea 100: | ||
</source> | </source> | ||
</div> | </div> | ||
− | + | <div class="slide"> | |
− | * | + | ====Seleccionar datos en petición AJAX==== |
+ | *Podemos añadir un selector jQuery a nuestra URL de petición AJAX: | ||
<source lang="javascript"> | <source lang="javascript"> | ||
− | $(" | + | $("#div1").load("mipagina.html #p1"); |
− | + | ||
</source> | </source> | ||
− | * | + | * En este caso obtendremos del fichero mipagina.html el elemento identificado con id="p1". |
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====Paso de parámetros==== | ||
+ | *El método load puede llevar parámetros o una función de callback: | ||
<source lang="javascript"> | <source lang="javascript"> | ||
− | $("p"). | + | $(document).ready(function(){ |
− | alert(" | + | $("#enlaceajax").click(function(evento){ |
+ | evento.preventDefault(); | ||
+ | $("#destino").load("recibe-parametros.php", {nombre: "Pepe", edad: 45}, function(){ | ||
+ | alert("recibidos los datos por ajax"); | ||
+ | }); | ||
+ | }); | ||
+ | }) | ||
+ | </source> | ||
+ | *Fichero en php: | ||
+ | <source lang="html4strict"> | ||
+ | Recibido el siguiente dato: | ||
+ | <br/> | ||
+ | Nombre: <?php echo $_POST["nombre"];?> | ||
+ | <br/> | ||
+ | Edad: <?php echo $_POST["edad"];?> | ||
+ | </source> | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | ====Con mensaje de "carga"==== | ||
+ | <source lang="javascript"> | ||
+ | $(document).ready(function(){ | ||
+ | $("#enlaceajax").click(function(evento){ | ||
+ | evento.preventDefault(); | ||
+ | var ajax_load = "<img src='img/load.gif' alt='loading...' />"; | ||
+ | var loadUrl = "pagina_lenta.php"; | ||
+ | $("#result").html(ajax_load).load(loadUrl); | ||
+ | }); | ||
+ | }) | ||
+ | </script> | ||
+ | </source> | ||
+ | *Fichero en php: | ||
+ | <source lang="html4strict"> | ||
+ | <?php | ||
+ | sleep(3); | ||
+ | echo ("He tardado 3 segundos en ejecutar esta p&aactute;gina..."); | ||
+ | ?> | ||
+ | </source> | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | $(selector).load(URL,data,'''callback'''); | ||
+ | *El parámetro opcional de callback especifica la función de callback a ejecutar cuando el método load() se haya completado. Puede tener varios parámetros: | ||
+ | :responseTxt - contiene el resultado de la llamada si ha sido un éxito | ||
+ | :statusTXT - contiene el estado de la llamada | ||
+ | :xhr - contiene el objeto XMLHttpRequest | ||
+ | *Ejemplo de uso: | ||
+ | <source lang="javascript"> | ||
+ | $("button").click(function(){ | ||
+ | $("#div1").load("demo_test.txt",function(responseTxt,statusTxt,xhr){ | ||
+ | if(statusTxt=="success") | ||
+ | alert("External content loaded successfully!"); | ||
+ | if(statusTxt=="error") | ||
+ | alert("Error: "+xhr.status+": "+xhr.statusText); | ||
+ | }); | ||
}); | }); | ||
</source> | </source> | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | ===Otros métodos=== | ||
+ | *$.getJSON(): Obtiene un fichero JSON de un sitio remoto | ||
+ | *$.getScript(): Obtiene un fichero javascript de un sitio remoto | ||
+ | *$.get(): hace peticiones ajax vía GET | ||
+ | *$.post(): hace peticiones ajax vía POST | ||
+ | *$.ajax(): De más bajo nivel. Será útil para controlar errores en las peticiones AJAX o alguna función específica de AJAX (por ejemplo la cache). | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | ===Ajax y Firebug=== | ||
+ | *Podemos hacer un seguimiento de las peticiones Ajax desde la pestaña de Red de Firebug, opción XHR (XML HTTP REQUEST): | ||
+ | [[Archivo:firebug_load_1.png]] | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | *Si pulsamos en el recuadro del + a la izquierda, podremos ver los parámetros que se envían en la petición AJAX. <br/>En esta petición no hay ningún parámetro. El único que hay es un número aleatorio generado para forzar que la petición no se sirva de la caché. | ||
+ | [[Archivo:firebug_load_2.png]] | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | *En la pestaña de respuesta (response) encontramos lo que devuelve la petición AJAX: | ||
+ | [[Archivo:firebug_load_3.png]] | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | *En este caso enviamos más de un parámetro vía GET. Para pasar más de un parámetro: | ||
+ | <source lang="javascript"> | ||
+ | $("#load_get").click(function(){ | ||
+ | $("#result") | ||
+ | .html(ajax_load) | ||
+ | .load(loadUrl, "language=php&version=5"); | ||
+ | }); | ||
+ | </source> | ||
+ | [[Archivo:firebug_load_4.png]] | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | *Si pasamos los parámetros como un objeto en vez de como una cadena, se enviarán vía POST: | ||
+ | <source lang="javascript"> | ||
+ | $("#load_post").click(function(){ | ||
+ | $("#result") | ||
+ | .html(ajax_load) | ||
+ | .load(loadUrl, {language: "php", version: 5}); | ||
+ | }); | ||
+ | </source> | ||
+ | [[Archivo:firebug_load_5.png]] | ||
+ | </div> | ||
</div> | </div> |
Última revisión de 12:00 5 nov 2012