Mostrando entradas con la etiqueta AJAX. Mostrar todas las entradas
Mostrando entradas con la etiqueta AJAX. Mostrar todas las entradas

Introducción a AJAX 2/2 Codigos de ejemplo

Antes de empezar esta segunda parte de la introducción a AJAX donde nos meteremos de lleno en la programación en sí y dejaremos de lado la teoría, querría prevenir a los lectores que en una primera lectura el código y los ejemplos no sean comprensibles, pero se les anima a releerlos e intentar trazarlos para así llegar a una mayor comprensión del algoritmo utilizado.

Funciones comunes

Primero que nada vamos a revisar las 2 funciones que usaremos siempre en nuestro sistema AJAX.
//Funciones comunes
function addEvent(elemento,nomevento,funcion,captura)
{
if (elemento.attachEvent)
{
elemento.attachEvent('on'+nomevento,funcion);
return true;
}
else
if (elemento.addEventListener)
{
elemento.addEventListener(nomevento,funcion,captura);
return true;
}
else
return false;
}

function crearXMLHttpRequest()
{
var xmlHttp=null;
if (window.ActiveXObject)
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
else
if (window.XMLHttpRequest)
xmlHttp = new XMLHttpRequest();
return xmlHttp;
}
La función addEvent se encarga de ejecutar una 'funcion' al suceder un 'evento' sobre un 'elemento' es decir si tenemos el boton1 y queremos que en la acción 'onclick' se ejecute la función 'comprobar()', lo llamaremos de la siguiente forma:
addEvent(boton1, 'click', comprobar, false);
La función crearXMLHttpRequest() es la encargada de crear nuestro módulo AJAX para hacer peticiones de fondo. Básicamente se crea una función gracias al "amado" Internet explorer que usa un ActiveX, el resto de navegadores utilizan windows.XMLHttpRequest como marcan los estándares.

Introducción a AJAX 1/2

¿Qué significa AJAX?

Si bien mucha gente ha escuchado alguna vez en su período como programador web la palabra AJAX pocos saben que significa. Ajax es el acrónimo de Asynchronous Javascript And XML es decir, Javascript asíncrono y XML.

Según la RAE la definición de asíncrono es:
"Se dice del proceso o del efecto que no ocurre en completa correspondencia temporal con otro proceso u otra causa."

Es decir mientras trabajemos con ajax, Javascript no cargará ciertas informaciones cuando se carga la página principal sino cuando sean requeridas (Javascript asíncrono)

Pero, ¿Qué es realmente AJAX?

Como su propio nombre indica AJAX no es una sola tecnología sino que es la unión de muchas tecnologías muy populares que trabajan de forma conjunta logrando un potencial realmente increíble en una página web.

Las tecnologías que intervienen en AJAX son:

  •  Javascript
  • HTML
  • XML
  • CSS
  • PHP
  •  ASP

No todas son necesarias para el desarrollo óptimo de nuestra aplicación con AJAX pero si se recomienda su conocimiento.
Las más utilizadas son: Javascript, HTML, PHP y CSS, para estructuras de datos grandes se usa mucho XML.

¿Cómo funciona?

Quizá podamos simplificar la explicación imaginando iframes. El uso de iframes nació como una buena alternativa (ya prácticamente obsoleta) de mantener una sección de la página estática y solo recargar el resto.
Un ejemplo muy clásico es el menú de una web en un iframe y en otro iframe la web en sí.

Como ya he dicho esta práctica está casi obsoleta, pero AJAX tiene un concepto similar.
Con AJAX tenemos la posibilidad de consultar/mostrar/enviar datos sin necesidad de recargar la página por completo y en "background".

Un ejemplo simple puede ser el envío de un comentario.
En vez de actualizar por completo la página ejecutamos un script que nos envíe "de fondo" el comentario y a la vez lo cargue en nuestra página para su visualización.

Hay ciertas ventajas, así como desventajas.

Entre las ventajas podemos encontrar:

  • Mayor velocidad en la carga de la página: Siguiendo el ejemplo anterior, al no tener que cargar la página por completo al enviar el mensaje el tiempo de carga disminuye bastante.
  • Menos transferencia de datos en el servidor: Por el mismo motivo que nuestra web nos ofrece mayor velocidad, también nos ofrece una transferencia de datos menor a la correspondiente sin dicha tecnología.

Entre las desventajas podemos encontrar:

  • Pérdida del concepto "atras": Con esta tecnología el concepto de atrás se pierde, depende donde apliquemos AJAX ésta no nos afectará.
  • Marcadores indirectos: Ésta se produce en páginas completamente con AJAX como podria ser Gmail. Al crear un marcador, por ejemplo, en el correo 23 y abrir dicho marcador, este nos lleva a la página principal de Gmail y no a dicho mensaje.

¿Quién usa AJAX?

Hay muchas empresas que a día de hoy usan AJAX, algunas de ellas pueden ser:

  • Google (Orkut, Gmail, Google Groups, Google Map, Google Suggest)
  • Flickr (algunas funciones)
  • Amazon (motor de búsqueda)

Introducción a AJAX 2/2 (En redacción)

Sistema de coordenadas y representación de puntos en esta [PHP y 1/2 Ajax]

pantallazo de coordenadas y ejes


El script nace con la idea de crear una representación de rectas según una equación tipo: y = 5x+2

La idea era generar dinámicamente una gráfica donde se representara dicha recta y se calcularan diversos valores como su pendiente y una tabla de valores.

También incluía un sistema ajax con un panel bastante completo para representar puntos, rectas y vectores y poder trabajar con los mismos en tiempo real, es decir, cada ves que se modifica un valor la imagen se actualiza.

El problema surge cuando me entero que js no puede convertir el binario de mi php a una imagen.. ahí se arruina la idea, al menos de momento.

Ideo una segunda forma, guardar el .png y cargarlo en el mismo script y devolver el string listo para insertar en el html. Perfecto! se carga la imagen sin problemas, pero no se actualiza al enviar las coordenadas... así que el sistema ajax a la porra hasta que encuentre un método eficaz para actualizar la imagen...

Así que de momento el script se queda en un simple sistema de coordenadas al cual hay que hacer un 'refresh' cada vez que se quiere modificar la imagen, eso si, la primera ves la carga con ajax o.O"

El script:

- Geometria.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Graficas by Nax</title>
<script language="javascript" src="ajax.js"></script>
</head>

<body>

<div id="opciones">
<b>Puntos:</b><br />
Inserta los puntos (0,0):<br />
<textarea name="puntos" id="puntos" cols="10" rows="5">0,0</textarea><br /><br />
<input type="button" id="enviar" value="Crear" />
</div>

<br />
<br />
<div id="grafica">Aqui va la grafica</div>
</body>
</html> 

- ajax.js
addEvent(window,'load',cargar,false);

function cargar() {
var but = document.getElementById('enviar');
addEvent(but, 'click', creargrafica,false);
}

function enviarcomentario(e) {

if(window.event)
window.event.returnValue = false;
else
if (e)
e.preventDefault();
enviarFormulario();
}

var conexion;
function creargrafica() {
var points = document.getElementById('puntos');
var ran = Math.random();
conexion=crearXMLHttpRequest();
conexion.onreadystatechange = procesarEventos;
conexion.open('GET','grafica.php?points=' + encodeURIComponent(points.value) + '&'+ ran + '=' + ran, true);
conexion.send();

}

function procesarEventos() {
var graf = document.getElementById('grafica');
if (conexion.readyState == 4) {
graf.innerHTML = conexion.responseText;
} else{
graf.innerHTML = "wait";
}

}

//Funciones comunes de ajax
function addEvent(elemento,nomevento,funcion,captura)
{
if (elemento.attachEvent)
{
elemento.attachEvent('on'+nomevento,funcion);
return true;
}
else
if (elemento.addEventListener)
{
elemento.addEventListener(nomevento,funcion,captura);
return true;
}
else
return false;
}

function crearXMLHttpRequest()
{
var xmlHttp=null;
if (window.ActiveXObject)
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
else
if (window.XMLHttpRequest)
xmlHttp = new XMLHttpRequest();
return xmlHttp;
}

- grafica.php
<?php
@unlink('test.png');

$points = explode(' ',preg_replace('/rn|r|n/',' ',$_GET['points']));

$y = 400; $y0 = $y / 2; //coordenadas 0,0
$x = 500; $x0 = $x / 2;

$cm = 10; //1 cm = 10 px

//basic
$img = imagecreate($x,$y);
$background = imagecolorallocate($img, 0, 0 , 0);
$color = imagecolorallocate($img, 255, 255, 255);
$green = imagecolorallocate($img, 50, 255, 0);
$red = imagecolorallocate($img, 255, 50, 0);

imagestring($img, 2, 10 ,$y-50, "http://nax-syntaxerror.blogspot.com/", $red);
//ejes basicos
imageline($img, $x0, 0, $x0, $y, $color);
imageline($img, 0, $y0, $x, $y0, $color);

// Lineas de X
for ($i = 0; $i <= $x; $i +=10)
imageline($img, 0+$i,$y0+5,0+$i, $y0-5, $color);

//Lineas de Y
for ($i = 0; $i <= $y; $i += 10)
imageline($img, $x0+5, 0+$i, $x0-5, 0+$i, $color);

//puntos
foreach ($points as $key => $value) {
$ejes = explode(',', $value);
$ejes[0] = $ejes[0] * $cm; $ejes[1] = $ejes[1] * $cm;
imageline($img, $x0+$ejes[0], $y0+(-$ejes[1]), $x0+$ejes[0], $y0+(-$ejes[1])+3, $green);
}

imagepng($img,"test.png");
echo '<img src="test.png" />';
imagedestroy($img);
?>

Cualquier duda o aporte es bien recibido
nax