Ir al contenido principal

AJAX Asynchronous Javascript y XML


Ajax no es una tecnologia web sino el uso de distintas tecnologias web para alcanzar un objetivo "mejorar la velocidad" de las aplicaciones web.



De que esta compuesto AJAX?
1. Peticiones y Respuestas HTTP
2. Código del lado del Cliente (Javascript)
3. Programación del lado del servidor (PHP,JSP,ASP,ASPNET)
4. Transferir y procesar datos mediante el uso de XML

Ahora expliquemos sobre peticiones y respuestas HTTP.
HTTP Request
Ajax requiere y trabaja sobre el protocolo HTTP y para ello vamos a ver la estructura de HTTP Request
.- Linea de Apertura (Opening Line)
//[Metodo][Ruta Recurso][Version]
GET   /web/index.html HTTP/1.0
--------------------------------.
- Linea de Cabecera(Header lines)
//[Parametro][Sep][Valor]
User-Agent:Mozilla /4.0(Compatible:MSIE 5.5; Windows NT 5.0)Accept:Text/plain, text/html
--------------------------------
.- Una linea en Blanco(Blank Line)
--------------------------------
.- Opcionalmente un cuerpo mensaje(message Body)

HTTP Response
Asi como existe una pregunta en el servidor con HTTP Request tambien existira una respuesta con HTTP Response veamos su estructura.
.- Linea de status
HTTP/1.0 200 OK //[Versión][Codigo Status][Razon]
--------------------------------- 
TABLA RESUMEN
--------------------------------
//[Código de Status][Razon]
1?? |Información
2?? |Exito
3?? |Redirección
4?? |Error Cliente
5?? |Error Servidor
--------------------------------- 
TABLA A DETALLE DE CODIGO STATUS
--------------------------------
//[Código de Status][Razon][Explicación]
200 |OK ************** | Petición Correcta
204 |No Content ****** | Documento sin datos
301 |Moved Permanently | Recurso movido
401 |Not Authorized ** | Necesita autenticación
403 |Forbidden ********| Rechazada por el servidor
404 |Not Found ********| No existe en el servidor
408 |Request Timeout **| Recurso movido
500 |Server Error *****| Error del servidor


Vamos hacer una pequeña demostración de la efectividad de AJAX, intentaremos pedir la hora del servidor haciendo uno de la funcion DATE() de PHP.

Para esto crearemos un archivo HTML llamado index.html con el siguiente código.
<html>
<head>
<title>Nuestra Primera Aplicación Ajax
</title>
<style type="text/css">
body, td {font-family: Lucida Grande, Lucida Sans Unicode, sans-serif;font-size: 12px;color: #444;}
input, textarea {background: #EEE;border: 1px solid #DDD;padding: 3px;color: #666;font-size: 12px;font-family: Lucida Grande, Lucida Sans Unicode, sans-serif;width: 200px;}
input.button {width: 100px;border: 1px solid #CCC;cursor: pointer;}
input:hover, textarea:hover {border: 1px solid #ECFF9F;background: #FEFEFE;
}input:focus, textarea:focus {border: 1px solid #C3DF53;background: #FEFEFE;}
.displaybox {width:150px;background-color: #CF5A5A;border:2px solid #ECFF9F;color: #FFFFFF;padding:10px;font:24px Lucida Grande, Lucida Sans Unicode, sans-serif;}
</style>
<script language="JavaScript" type="text/javascript">
//Esta es la función que creara el objeto XMLHTTPRequest

function getXMLHTTPRequest() {
try {
req = new XMLHttpRequest(); //Mozilla
} catch(err1) 
{try {req = new ActiveXObject("Msxml2.XMLHTTP"); // IE Nuevos
} catch (err2) 
{try {req = new ActiveXObject("Microsoft.XMLHTTP"); //IE Antiguo
} catch (err3) 
{req = false;}}}
return req;
}
var http = getXMLHTTPRequest();
function horaServidor() 
{var myurl = 'dimehoraxml.php'; 
myRand = parseInt(Math.random()*999999999999999);
var modurl = myurl+"?rand="+myRand;
http.open("GET", modurl, true);
http.onreadystatechange = useHttpResponse;
http.send(null);}

function useHttpResponse() {

if (http.readyState == 4) { }
//Si se completo OK
if(http.status == 200) { 
//Si Petición Correcta
var timeValue = http.responseXML.getElementsByTagName("timenow")[0];

//Insertar HTML dentro del la etiqueta

showtimedocument.getElementById('showtime').innerHTML = timeValue.childNodes[0].nodeValue;
}
} else {document.getElementById('showtime').innerHTML = '<img src="loading.gif">';}
}
</script>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head><body style="background-color: #006666" onLoad="horaServidor()">
<center>
<h1 class="Estilo2" style="color:#FFFF00">Nuestra primera aplicación Ajax</h1>
<h2 class="Estilo1">Obtener la hora del servidor sin actualizar la página</h2>
<form>
<!-- LLamando a la función HoraServidor() -->
<input type="button" class="Estilo2" onClick="horaServidor()" value="¿Cuál es la hora del servidor?">
</form>
<!-- Etiqueta showtime que recibira el resultado AJAX -->
<div id="showtime" class="displaybox">
</div>
</center>
</body>
</html>


Luego tenemos que crear otro archivo llamado dimerhoraxml.php

<?php
header('Content-Type: text/xml');
echo "<?xml version=\"1.0\"?><clock1><timenow>".date('H:i:s')."</timenow></clock1>";
?>

y por ultimo agregar esta imagen llamada "loading.gif" para la animación de el proceso mientras se intenta recoger datos del servidor.
Ahora podremos observar el ejemplo en esta dirección http://superahacker.webcindario.com/ajax002/index.html.

Comentarios

Entradas más populares de este blog

JSP y MySQL Conexion a Base de Datos

Tema anterior: http://superahacker.blogspot.com/2009/06/instalacion-netbeans-glassfish.html El modulo JSP con conexion a una base de datos MySQL, tiene las siguientes caracteristicas usar una clase Java llamada "Customers" que se encuentra en un package llamado "Mypackage" , para usar sus metodos y con ellos llevar acabo una consulta.

JSP y MsSQL Conexion a Base de Datos

Tema anterior: http://superahacker.blogspot.com/2009/09/jsp-y-mysql-conexion-base-de-datos.html El modulo JSP con conexion a una base de datos Ms SQL Server, tiene las siguientes caracteristicas usar una clase Java llamada "Customers" que se encuentra en un package llamado "Mypackage" , para usar sus metodos y con ellos llevar acabo una consulta.

FreeTDS para el acceso a MsSQL desde PHP en Linux CentOS 5

Tema Anterior: http://superahacker.blogspot.com/2009/04/instalacion-de-unixodbc-para-la.html En esta ocasion la situación es como conectar con PHP 5 desde un Servidor Linux a una base de Datos Ms Sql Server en Servidor Windows.