Beruflich Dokumente
Kultur Dokumente
Introduccin a AJAX
AJAX no es precisamente una nueva tecnologa web, podra definirse como el uso
coordinado de distintas tecnologias que en conjunto permiten una navegacin ms
gil y rapida, como consecuencia logrando la interaccin en una aplicacin dinmica
basada en web, muy similar a las aplicaciones de escritorio.
AJAX es independiente al lenguaje (PHP, ASP, JSP) que se usa en el Servidor, sin
embargo es preciso interactuar con ste para conseguir la dinamicidad y el acceso a
datos, los ejemplos que se plantearn estarn orientados al uso de PHP.
Para el mejor comprendimiento del curso, sugiero revisar los siguientes temas:
Historia
HTTP Request:
HTTP Response:
Todo esto ocurre en segundo plano por lo cual en una aplicacin web tradicional no
se ve el resultado ni la razon explicativa, sin embargo esto servir para que el motor
AJAX pueda determinar la accion que se deba realizar.
Metodo GET
Los datos son enviados dentro de una cadena de consulta (Query string), aadido a
la URL
Metodo POST
Este mtodo es usado cuando la peticin es iniciada por un Formulario, los datos son
enviados en el cuerpo del mensaje (message body)
Una aplicacin web tradicional, la pagina es un todo, si la pagina llama a otra pagina,
esta debe cargarse de nuevo. Por tanto al presionar un boton o vinculo debemos
esperar hasta que cargue la pagina.
No debe volverse a presionar el boton, pues esto iniciara de nuevo una peticin. Una
caracteristica es la demora mientras se ejecuta algun proceso debiendo el usuario
esperar a que el servidor devuelva la pagina.
El Objeto XMLHTTPRequest
Propiedades
Mtodos
La funcin getXMLHTTPRequest()
Archivo: ajax.js
function getXMLHTTPRequest() {
var req;
try {
req = new XMLHttpRequest();
} catch(err1) {
try {
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch (err2) {
try {
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch (err3) {
req = false;
}
}
}
return req;
}
El siguiente ejemplo muestra como desde un formulario se ingresa los valores y luego
se envia al motor AJAX para su procesamiento, el motor AJAX interactua con una
pagina PHP quien devuelve el valor a manera de una cadena.
Ejemplo01.htm
<head>
<title>Primer ejemplo</title>
</head>
<script language="javascript" src="ajax.js">
</script>
<script language="javascript">
http = getXMLHTTPRequest();
msg = "Procesando";
function procesar(){
var myurl = 'procesar1.php';
var n1 = form1.n1.value;
var n2 = form1.n2.value;
var modurl = myurl + "?n1=" + n1 + "&n2=" + n2;
http.open("GET", modurl, true);
http.onreadystatechange = useHTTPResponse;
http.send(null);
}
function useHTTPResponse() {
if (http.readyState == 4) {
if(http.status == 200) {
form1.suma.value = http.responseText;
}
} else {
form1.suma.value=msg;
}
}
</script>
<body>
<form name="form1">
n1: <input type="text" name="n1" /><br />
n2: <input type="text" name="n2" /><br />
suma: <input type="text" name="suma" disabled="disabled" /><br />
<input type="button" value="Calcular" onclick="procesar();" />
</form>
</body>
</html>
La pagina PHP que realiza el proceso, simplemente imprime el valor, el que luego es
recepcionado por el motor AJAX
Ejemplo01.php
<?php
$n1 = $_GET["n1"];
$n2 = $_GET["n2"];
$s = $n1 + $n2;
echo $s;
?>
Ejemplo02.htm
<head>
<title>Segundo ejemplo</title>
</head>
<script language="javascript" src="ajax.js"></script>
<script language="javascript">
http = getXMLHTTPRequest();
msg = "Procesando";
function procesar(){
var myurl = 'procesar2.php';
var n1 = form1.n1.value;
var n2 = form1.n2.value;
var modurl = myurl + "?n1=" + n1 + "&n2=" + n2;
http.open("GET", modurl, true);
http.onreadystatechange = useHTTPResponse;
http.send(null);
}
function useHTTPResponse() {
if (http.readyState == 4) {
if(http.status == 200) {
var suma = http.responseXML.getElementsByTagName("suma")[0];
form1.suma.value = suma.childNodes[0].nodeValue;
}
} else {
form1.suma.value=msg;
msg = right(msg,1) + left(msg,len(msg)-1);
}
}
</script>
<body>
<form name="form1">
n1: <input type="text" name="n1" /><br />
n2: <input type="text" name="n2" /><br />
suma: <input type="text" name="suma" disabled="disabled" /><br />
<input type="button" value="Calcular" onclick="procesar();" />
</form>
</body>
</html>
Ejemplo02.php
<?php
header('Content-Type: text/xml');
$n1 = $_GET["n1"];
$n2 = $_GET["n2"];
$s = $n1 + $n2;
echo "<?xml version=\"1.0\"?>";
echo "<rpta><suma>";
echo $s;
echo "</suma></rpta>";
?>
Aqu usamos innerHTML para escribir dentro de una capa, en este caso dentro de la capa
"codigohtml", escribimos el resultado devuelto por el archivo PHP
Ejemplo03.htm
<html>
<head>
<title>Mi aplicacin AJAX</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script language="javascript" src="ajax.js"></script>
<script Language="JavaScript">
http = getXMLHTTPRequest();
function obtenerTextoServidor() {
function useHttpResponse() {
if (http.readyState == 4) {
if(http.status == 200) {
var miTexto = http.responseText;
document.getElementById('codigohtml').innerHTML = (miTexto);
}
} else {
document. getElementById('codigohtml').innerHTML = '<img src="anim.gif">'; }
}
</script>
</head>
<body onLoad="obtenerTextoServidor()">
Aqu est el texto devuelto por el servidor:<br>
<div id="codigohtml"></div>
</body>
</html>
Ejemplo03.php
<?php
$dias = array ('Lunes','Martes','Mircoles','Jueves','Viernes','Sbado','Domingo');
echo "<table border='2'>";
echo utf8_encode ("<tr><th>Nmero Da</th><th>Nombre Da</th></tr>");
for($i=0;$i<7;$i++)
{
echo utf8_encode ("<tr><td>".$i."</td><td>".$dias[$i]."</td></tr>");
}
echo "</table>";
?>
Ejercicio 1:
Desarrolle un programa que calcule el salario de un obrero, el calculo se hara en
funcion de la categora del obrero, de la prenda confeccionada, de la cantidad y del
turno:
Tabla: obrero
Idobrero int autonumerico
Obrero varchar 50
Categora varchar 1
Tabla: articulo
Idarticulo int autonumerico
Articulo varchar 50
El calculo se realiza:
Ejercicio 2:
Se tiene una tabla de Paises y una tabla de Ciudades, deber construir un programa
que muestre una lista con los Paises, de acuerdo al Pais seleccionado se mostrar
las Ciudades