Custom Search
Bloggers Activos
Emacs como IDE para CakePHP aarkerio
La Negación del Viaje Lunar tonathiu
Porque los mononeurones si tenemos madre! blacksoul
BrunoFerías thot
The Art vendaval
Aclimatación extraterrestre ¿para qué? ahuramazdah
¿A que le tienes miedo? teosho
Sobre nazis, terror y medios tonathiu
Amenazas a la cuarta dimensión ¿de veras? ahuramazdah
Tarjeta Broadcom BCM94311MCG rev 02 teosho
Last Download
Segunda Fundación
Segunda Fundación
Pidiendo OpenSolaris 2008.5
vendaval
Sospechosismo
aarkerio
Slackware 12.1 Final
vendaval
Jaime Maussan da por auténtico video trucado del chupacabras hecho en Blender 3D
asarch
Linux hot girl
aarkerio
Calderón puede ser sujeto a juicio político, sostiene Carrancá
tonathiu
La desnutrición en México
aarkerio
Sistema Infalible
ordbal
Histórico
aarkerio
Nietzsche en la FCPyS
aarkerio
Google Groups Karamelo
Visit this group
GNU/Linux
GNU/Linux
Hacktivismo
Hacktivismo
Debian
Debian
NetBSD
NetBSD
WWW
WWW
Guia Linux
Guia Linux
Server Side
Server Side
Ofimatica
Ofimatica
Despabilando...
Despabilando...
Mundo Maya
Mundo Maya
Literatura
Literatura
Agora
Agora
Psicologia
Psicologia
Economia
Economia
Ambientalismo
Ambientalismo
Desarrollo
Desarrollo
Biologia
Biologia
No compres, adopta
No compres, adopta

Hacktivism

LinuxChix button

WWW \ Tutorial de AJAX (Asynchronous JavaScript + XML)
WWW
Tutorial de AJAX (Asynchronous JavaScript + XML)

Este artículo ha sido consultado en 1,153 ocasiones.

  1. Concepto de AJAX
    AJAX, es el acrónimo para Asynchronous JavaScript+CSS+DOM+XMLHttpRequest.Esta metodología para generar contenido, una vez cargada y procesada una página, envía mediante eventos scripts y rutinas que van al servidor buscando en background los datos en porciones específicas, donde estos datos son usados para actualizar la página solo regenerando porciones de la misma, sin recargar todo el contenido del documento en el navegador.

  2. Entendiendo AJAX
    Ajax no es un script, no es un servidor, no es un archivo, no es un programa, no es un módulo de apache, no es una extensión de PHP, NO ES UNA TECNOLOGIA.

    Por ejemplo en un proceso normal una aplicacion web recarga o va de una página a otra porque debe enviar una petición a algun servidor web esta debe procesarla y mandar el resultado finaly el resultado final es la página a la cual nos dirige la aplicacion o la recarga de la página misma. En todo esto AJAX hace lo mismo con la diferencia que lo hace en background osea que realiza todo el proceso de comunicacion con algun servidor web sin que el usuario pueda verlo y una vez terminada con éxito solo añadir el resultado del proceso a la página en curso de esta manera evitar la recarga o una página receptora de los resultados del proceso.

    Entiendase que AJAX no se refiere a usar el objeto XMLHttpRequest de manera indispensable porque en realidad AJAX no es una tecnología, sino la unión de varias tecnologías que juntas pueden lograr cosas realmente impresionantes como GoogleMaps, Gmail,etc.

    A continuación algunas formas similares a lo que es AJAX

    • Javascript Remote Scripting (JSRS) Un cliente javascript que ejecuta procesos en background escondiendo elementos, iframes,etc no usa el objeto XMLhttprequest

    • Microsoft's Remote Scripting (MSRS): solves this problem by embedding a Java applet in the page to communicate with the server. It provides synchronous and asynchronous remote procedure calls, and works with Netscape 4.x and IE 4+ only on Windows platforms. Because it requires Java, it only works with Windows XP if the optional JVM is loaded. It is designed to work with IIS/ASP on the server side. MSRS is in wide use, mostly on corporate intranets where the client base is predictable. Microsoft has made MSRS freely available.

    • Internet Explorer:download Behavior: Ofrece una implementación muy similar de lo que hace JSRS. Si van a trabajar exclusivamente con Internet Explorer y no quieren complicarse la vida con XML y esas cosas, pueden echarle una miradita.

    • Webservice Behaviour: Si se quieren complicar un poco más la vida, si les piden que se contacten con un servicio web en SOAP desde IE, pueden usar el comportamiento Webservice.

    • XML-RPC: Una especificación para usar XML y HTTP para hacer RPC. Si bien tiene una impresionante lista de implementaciones en distintos lenguajes, lo verboso del XML hace que la más simple llamada ocupe un monto alto de ancho de banda y el control de errores que posee es bastante malo. Lo utilice para hacer RPC entre dos servidores con PHP y funcionó, de todos modos, relativamente bien. No lo recomendaría si del lado del cliente utilizan sólo Js.

    • RSLite is an extremely lightweight implementation of remote scripting which uses cookies. It is very widely browser-compatible (Opera!) but limited to single calls and small amounts of data. It is also free.


  3. Nuestro material para este tutorial
    Para este tutorial usaré el objeto XMLHttpRequest() porque..... es la única manera que sé de hacer AJAX ... lo siento.

    Este objeto fué testeado en Internet Explorer >=6.0 Mozilla, Mozilla Firefox, Opera >=8 en opera anteriores a 8 no existe el objeto XMLHTtpRequest asi que sugiero bajarse alguna version ultima de este navegador.

  4. El objeto XMLHttpRequest
    Como vamos a trabajar con este objeto nativo es indispensable crearlo caso contrario ni se podrá comenzar las aplicaciones, partiremos con el objeto desde la creación, Métodos y propiedades.

    • Creando el objeto XMLHttpRequest
      Muchos navegadores requieren una forma diferente de invocar al objeto XMLHttpRequest pero no nos vamos a hacer lios y usaremos uno estándar y que nunca me a fallado.

      function objetus() {
              
      try {
                       
      objetus = new ActiveXObject("Msxml2.XMLHTTP");
              }
      catch ( e) {
                       
      try {
                               
      objetus= new ActiveXObject ("Microsoft.XMLHTTP");
                       }
      catch (E) {
                               
      objetus= false;
                      }
              }
              if (!
      objetus && typeof XMLHttpRequest!= 'undefined') {
                       
      objetus = new XMLHttpRequest();
              }
              return
      objetus
      }


      solo llamamos a ajax= objetus() y ya tenemos el objeto en la variable ajax.

      Otra manera de invocar al objeto es esta.

      function objetus() {
      var
      xmlhttp =false;
      /*@cc_on @*/
      /*@if (@_jscript_version >= 5)
      // JScript gives us Conditional compilation, we can cope with old IE versions.
      // and security blocked creation of the objects.
      try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
        try {
         xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
         xmlhttp = false;
        }
      }
      @end @*/
      if (!xmlhttp && typeof XMLHttpRequest!='undefined' ) {
        
      xmlhttp = new XMLHttpRequest();
      }
      }


      Te aconsejo usar la primera manera.

    • Métodos
      A continuación los métodos del objeto.

      • abort() : Detiene la petición en curso.
      • getAllResponseHeaders() : Devuelve todas las cabeceras de la respuesta (etiquetas y valores) como una cadena.
      • getResponseHeader( etiqueta) : Devuelve el valor de la etiqueta en las cabeceras de la respuesta.
      • open( método, URL, asíncrona, usuario, password) : Abre una conexión con esa URL medianteel método (GET,POST,HEAD,POST o DELETE), tiene 5 parámetros de entrada, las 2 primeras (método, URL) son obligatorios:
        método - El método que se usará para la conexión (GET,POST,HEAD,POST o DELETE).
        URL - La URL que se llamará para el proceso.
        Las 3 restantes (asíncrona, usuario, password) son opcionales:
        asíncrona - Valor booleano, true indica que el proceso se ejecutarà sin parar la aplicacion en curso (Background) false indica que se detendrà el proceso hasta que se termine el proceso de manera correcta.
      • send( contenido) : Envía el contenido al servidor.
      • setRequestHeader( etiqueta,valor) : Establece el valor de una etiqueta de las cabeceras de petición.


    • Propiedades
      A continuación las propiedades del objeto.

      • onreadystatechange : Contiene el nombre de la función que se ejecuta cada vez que el estado de la conexión cambie.
      • readyState : Estado de la conexión.

        Código: Estado
        1: Cargando
        2: Cargado, pero sin su contenido incorporado a los objetos correspondientes
        3: Incorporando a los objetos correspondientes
        4: Carga completada


      • responseText : Datos devueltos por el servidor en formato cadena.
      • responseXML : Datos devueltos por el servidor en forma de documento XML que puede ser recorrido mediante las funciones del DOM (getEementsByTagName, etc).
      • status : Código enviado por el servidor.


      • Código: valor
        200: Completado con éxito
        404: No se encontró URL
        414: Los valores pasados por GET superan los 512

      • statusText ; Mensaje de texto enviado por el servidor junto al código (status), para el caso de código 200 contendrá "OK".

  5. Como funciona el proceso Cliente-Servidor
    Cuando nuestro cliente se comunica con el servidor este no recibirá variables para su uso, modificación.
    Nuestro objeto XMLHttpRequest al invocarlo y pedir datos a un servidor lo que recibe es LO QUE EL SERVIDOR SUELTA, me explico:

    Tenemos un proc.php que recibirá variables por el método GET.
    PHP [inicio]
    1. <?php
    2. if(isset($_GET['valor']))
    3. {
    4.     $_valor=$_GET['valor'];
    5.     if($_valor==1)
    6.     {
    7.         echo "Enviaste el valor 1";
    8.     }
    9.     elseif ($_valor==2)
    10.     {
    11.         echo "Enviaste el valor 2";
    12.     }
    13.     else
    14.     {
    15.         echo "No enviaste ningun valor ACEPTABLE";
    16.     }
    17. }
    18. else
    19. {
    20.     echo "No se a enviado valor alguno de peticion";
    21. }
    22. ?>
    PHP [fin]

    Si ponemos http://algo.com/proc.php?valor=1 el archivo soltará
    Enviaste el valor 1
    Si ponemos http://algo.com/proc.php?valor=2 el archivo soltará
    Enviaste el valor 2
    Si ponemos http://algo.com/proc.php?valor=5345 el archivo soltará
    No enviaste ningun valor ACEPTABLE
    Si no le damos variables http://algo.com/proc.php el archivo soltará
    No se a enviado valor alguno de peticion
    Entonces lo que debemos hacer es que nuestros archivos Cliente entiendan la línea y la manera de procesas las peticiones que tendrá nuestro servidor.

    Eso sí, al realizar la petición al servidor se pueden crear variables de sesion, cookies, consultas SQL, etc etc.

  6. Reglas del juego para los ejemplos
    Nuestro cliente se llamará cliente.php
    Nuestro procesador, que se ocupe de enviarnos lo que pedimos se llamará procesador.php

    Osea..... si me refiero a cliente me refiero al archivo cliente.php y sidigo "... entonces nuestro procesador nos mandará...." me refiero al archivo procesador.php.

  7. Nuestro primer tope con AJAX
    Como primer ejemplo no haremos el típico HOLA MUNDO enviaremos una petición a nuestro procesador que nos arrojará nuestro IP,REQUEST_URI,date() usando el método GET.

    Ejemplo 1
    cliente
    PHP [inicio]
    1. <script language="javascript"  type="text/javascript">
    2. //funcion encargada de crear el objeto
    3. function objetus() {
    4.         try {
    5.                 objetus = new ActiveXObject("Msxml2.XMLHTTP");
    6.         } catch (e) {
    7.                 try {
    8.                         objetus= new ActiveXObject("Microsoft.XMLHTTP");
    9.                 } catch (E) {
    10.                         objetus= false;
    11.                 }
    12.         }
    13.         if (!objetus && typeof XMLHttpRequest!='undefined') {
    14.                 objetus = new XMLHttpRequest();
    15.         }
    16.         return objetus
    17. }
    18. //la funcion que hará el trabajo sucio
    19. //esta funcion es la que llamamos en el evento ONCLICK de nuestro boton
    20. function primer_tope()
    21. {
    22.     //creamos el objeto
    23.     _objetus=objetus()
    24.     //cargamos una varible con las variables que vamos a enviar
    25.     _values_send="funcion=pt"
    26.     _URL_="proceso.php?"
    27.     _objetus.open("GET",_URL_+"&"+_values_send,true);
    28.         //una vez enviado los valores inmediatamente llamamos a la propiedad
    29.         //onreadystatechange
    30.     _objetus.onreadystatechange=function() {
    31.                 //dentro de la funcion comprobamos el estado del proceso
    32.                 //si es 4 (terminado) pedimos lo que nos han mandado
    33.         if (_objetus.readyState==4)
    34.         {
    35.                 //usamos la propiedad responseText para recibir en una cadena
    36.                 //lo que nos mandaron
    37.             window.alert(_objetus.responseText);
    38.         }
    39.     }
    40.     //obligatorio .... luego explicarè el porque
    41.     _objetus.send(null);
    42. }
    43. </script>
    44. <input type="button" name="visual" value="Pedir datos" class="boton" onclick="primer_tope();">
    45. <!-- mas documento HTML -->
    PHP [fin]

    Nuestro procesador trabajará segun la variable funcion que reciba por el método GET
    PHP [inicio]
    1. <?php
    2. if(isset($_GET['funcion']))
    3. {
    4.     $_valor=$_GET['funcion'];
    5.     if($_valor=="pt")
    6.     {
    7.         $_pt="Tu ip: ".htmlspecialchars($_SERVER['REMOTE_ADDR'])."\n";
    8.         $_pt.="request_uri: ".htmlspecialchars($_SERVER['REQUEST_URI'])."\n";
    9.         $_pt.="date(): ".htmlspecialchars(date("d-m-Y : H-i-s"))."\n";
    10.         echo $_pt;
    11.     }
    12.         
    13.     else
    14.     {
    15.         echo "No enviaste ningun valor ACEPTABLE";
    16.     }
    17. }
    18. else
    19. {
    20.     echo "No se a enviado valor alguno de peticion";
    21. }
    22. ?>
    PHP [fin]




    • Analizando la funcion primer_tope()
      Fuera de lo que es la funcion objetus() analizaremos nuestra funcion que se encargo del envío y recepcion de datos.

      _objetus=objetus()
      Invocamos al objeto XMLHttpRequest

      _values_send="funcion=pt"
      Cargamos todas las variables que se van a enviar

      _URL_="proceso.php?"
      La URL donde nos comunicaremos (Nótese el ? al final del archivo)

      _objetus.open("GET",_URL_+"&"+_values_send,true);
      La parte más importante, aqui abrimos la URL con los valores cargados osea proceso.php?funcion=pt

      _objetus.onreadystatechange=function() {
      Invocamos la propiedad onreadystatechange, entonces cuando el objeto llegue a este punto se llamará a una funcion que gestionará el resto del proceso.

      if (_objetus.readyState==4)
              {

      Llamamos ahora a la propiedad readyState que nos indicará en que estado se encuentra el proceso, entonces cuando el estado sea 4 (Terminado) hacemos LO QUE SE NOS OCURRA.

      if(_objetus.status==200)
      {

      Si el estado del proceso arroja un status 200 significa que a terminado con éxito.

      window.alert(_objetus.responseText);
      En este caso llamamos a la propiedad responseText que tiene lo que el procesador soltó y lo mostramos mediante un alert.

      }
         }
      }
      _objetus.send(null);
      }

      Y por ultimo enviamos null porque hemos enviado todas las variables que nos interasaban automáticamente al abrir

      proceso.php?funcion=pt

      _objetus.send(null) : Es obligatorio, si no se envia algo el proceso no funciona.


  8. Lineas sagradas de una función cliente para el método GET
    function algo()
    {
        
    _objetus=objetus() //crear objeto
        
    _values_send="variable=valor&otrovar=otvalor" //variables
        
    _URL_="algo.php?" //URL
        
    _objetus.open("GET",_URL_+"&"+_values_send,true); //abrir procesador
        
    _objetus.onreadystatechange=function() { //funcion controlador
            
    if (_objetus.readyState==4) //control de estados del proceso
            
    {
                     
    //si se da un status 200 (TERMINADO CON EXITO)
                      
    if(_objetus.status==200)
                {
                             
    //procesos que se realizaran con los datos obtenidos                         
                             
    }
            }
        }
        
    _objetus.send(null); //envío nulo de variables
    }


  9. Lineas sagradas de una función cliente para el método POST
    function algo()
    {
        
    _objetus=objetus() //crear objeto
        
    _values_send="variable=valor&otrovar=otvalor" //variables
        
    _URL_="algo.php?" //URL
        
    _objetus.open("POST",_URL_,true); //abrir procesador
        
    _objetus.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); //cabeceras POST
        
    _objetus.send('&'+_values_send); //enviar variables
        
    _objetus.onreadystatechange=function() { //funcion controlador
            
    if (_objetus.readyState==4) //control de estados del proceso
            
    {
                     
    //si se da un status 200 (TERMINADO CON EXITO)
                      
    if(_objetus.status==200)
                {
                             
    //procesos que se realizaran con los datos obtenidos                         
                             
    }
            }
        }
    }

    Nótense las diferencias con el método GET

  10. Recibiendo los resultados del procesador
    Hay dos maneras en las que se puede recibir la informacion devuelta por el procesador, las propiedades: responseText y responseXML

    • responseText: Con esta propiedad se reciben los datos de la siguiente manera. Cuando el estado del proceso esté en el nivel 4

      vari=objetus.responseText

      Entonces aqui la variable vari contendrá el resultado del procesador.
      Ejemplo:

      window.alert(vari)

      Esto es lo que usamos en nuestro primer ejemplo, aqui cuando el proceso llega a nivel 4 creamos un alert con los datos que nos a enviado el procesador.

    • responseXML:
      Con esta propiedad el procesador nos devuelve los datos como XML y debemos recorrerlo mediante las funciones del DOM (getEementsByTagName, etc).

      vari=objetus.responseXML

      Guardamos el documento devuelto en la variable vari para luego recorrerla,en el caso para nuestro ejemplo el documento XML del procesador tendrá la siguente estructura:
      <serv> <ip>ip</ip> <uri>uri </uri> <date>date</date> </serv>
      var _ip = vari.getElementsByTagName('ip').item(0).firstChild.data;
      var
      _uri = vari.getElementsByTagName('uri').item(0).firstChild.data;
      var
      _date = vari.getElementsByTagName('date').item(0).firstChild.data;


      Entonces mostraremos: window.alert(_ip+"\n"+_uri+"\n"+_date)

      Hagamos el ejemplo1 con responseXML

      Ejemplo 1-b
      cliente
      PHP [inicio]
      1. <script language="javascript"  type="text/javascript">
      2. //funcion encargada de crear el objeto
      3. function objetus() {
      4.         try {
      5.                 objetus = new ActiveXObject("Msxml2.XMLHTTP");
      6.         } catch (e) {
      7.                 try {
      8.                          objetus= new ActiveXObject("Microsoft.XMLHTTP");
      9.                 } catch (E) {
      10.                          objetus= false;
      11.                 }
      12.         }
      13.         if (!objetus && typeof XMLHttpRequest!='undefined') {
      14.                 objetus = new XMLHttpRequest();
      15.         }
      16.         return objetus
      17. }
      18. //la funcion que hará el trabajo sucio
      19. //esta funcion es la que llamamos en el evento ONCLICK de nuestro boton
      20. function primer_tope()
      21. {
      22.     //creamos el objeto
      23.     _objetus=objetus()
      24.     //cargamos una varible con las variables que vamos a enviar
      25.     _values_send="funcion=pt"
      26.     _URL_="proceso.php?"
      27.     _objetus.open("GET",_URL_+"&"+_values_send,true);
      28.         //una vez enviado los valores inmediatamente llamamos a la propiedad
      29.         //onreadystatechange
      30.     _objetus.onreadystatechange=function() {
      31.                 //dentro de la funcion comprobamos el estado del proceso
      32.                 //si es 4 (terminado) pedimos lo que nos han mandado
      33.         if (_objetus.readyState==4)
      34.         {
      35.                     //si se da un status 200 (TERMINADO CON EXITO)
      36.                     if(_objetus.status==200)
      37.             {
      38.                 //usamos la propiedad responseText para recibir en una cadena
      39.                 //lo que nos mandaron
      40.             window.alert(_objetus.responseText);
      41.                          }
      42.         }
      43.     }
      44.     //obligatorio .... luego explicarè el porque
      45.     _objetus.send(null);
      46. }
      47. function primer_topeXML()
      48. {
      49.     _objetus=monitor_get_xmlhttp()
      50.     _values_send="funcion=ptxml"
      51.     _URL_="ajax_tut.php?"
      52.     _objetus.open("GET",_URL_+"&"+_values_send,true);
      53.     //_objetus.overrideMimeType("text/xml");
      54.     _objetus.onreadystatechange=function() {
      55.         if (_objetus.readyState==4)
      56.         {
      57.                      if(_objetus.status==200)
      58.             {
      59.             var vari=_objetus.responseXML;
      60.             var _ip = vari.getElementsByTagName('ip').item(0).firstChild.data;
      61.             var _uri = vari.getElementsByTagName('uri').item(0).firstChild.data;
      62.             var _date = vari.getElementsByTagName('date').item(0).firstChild.data;
      63.             window.alert(_ip+"\n"+_uri+"\n"+_date);
      64.                          }
      65.         }
      66.     }
      67.     _objetus.send(null);
      68.     return
      69. }
      70. </script>
      71. <input type="button" name="visual" value="Pedir datos con rexponseText" class="boton" onclick="primer_tope();">---------
      72. <input type="button" name="visual" value="Pedir datos con rexponseXML" class="boton" onclick="primer_topeXML();">
      73. <!-- mas documento HTML -->
      PHP [fin]

      procesador
      PHP [inicio]
      1. <?php
      2. if(isset($_GET['funcion']))
      3. {
      4.     $_valor=$_GET['funcion'];
      5.     if($_valor=="pt")
      6.     {
      7.         $_pt="Tu ip: ".htmlspecialchars($_SERVER['REMOTE_ADDR'])."\n";
      8.         $_pt.="request_uri: ".htmlspecialchars($_SERVER['REQUEST_URI'])."\n";
      9.         $_pt.="date(): ".htmlspecialchars(date("d-m-Y : H-i-s"))."\n";
      10.         echo $_pt;
      11.     }
      12.     elseif ($_valor=="ptxml")
      13.     {
      14.         $_xml="<?xml version=\"1.0\" standalone=\"yes\"?>\n";
      15.         $_xml.="<serv>\n";
      16.         $_xml.="<ip>Tu ip: ".htmlspecialchars($_SERVER['REMOTE_ADDR'])."</ip>\n";
      17.         $_xml.="<uri>request_uri: ".htmlspecialchars($_SERVER['REQUEST_URI'])."</uri>\n";
      18.         $_xml.="<date>date(): ".htmlspecialchars(date("d-m-Y : H-i-s"))."</date>\n";
      19.         $_xml.="</serv>\n";
      20.         //mandamemos cabeceras identificando al documento
      21.         //como un documento XML
      22.         header('Content-Type: text/xml');
      23.         echo $_xml;
      24.     }
      25.     else
      26.     {
      27.         echo "No enviaste ningun valor ACEPTABLE";
      28.     }
      29. }
      30. else
      31. {
      32.     echo "No se a enviado valor alguno de peticion";
      33. }
      34. ?>
      PHP [fin]



  11. Re-renderizando elementos
    Hasta ahora hemos manejado los datos que nos llegaban del procesador viendolos con un alert (window.alert(respuesta)) pues bien ahora vamos a "embeder" los resultados en nuestras páginas, tenemos 2 maneras de llamar al elemento donde se pondrá el nuevo contenido:

    • document.getElementById("elementID") : Llamaremos al elemento por el ID

      <div id="nombreid" ></div>

      Entonces vamos a cambiar nuestro window.alert(respuesta) por document.getElementById(target) aplicandole la propiedad innerHTML, quedandonos:

      target="nombreid";
      document.getElementById(target).innerHTML = _objetus.responseText;


    • document.getElementsByTagName("tagName") : Llamaremos al elemento por su tag name

      <div name="nombreelem" ></div>

      No tengo una idea clara a como llamar por su tag name, porfavor pido la ayuda de alguien que sepa esto

    Ejemplo 2
    Solo cambiará nuestro cliente.
    PHP [inicio]
    1. <script language="javascript"  type="text/javascript">
    2. //funcion encarga de crear el objeto
    3. function objetus() {
    4.     try {
    5.         xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    6.     } catch (e) {
    7.         try {
    8.             xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    9.         } catch (E) {
    10.             xmlhttp = false;
    11.         }
    12.     }
    13.     if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    14.         xmlhttp = new XMLHttpRequest();
    15.     }
    16.     return xmlhttp
    17. }
    18. function primer_tope()
    19. {
    20.     _objetus=monitor_get_xmlhttp()
    21.     _values_send="funcion=pt"
    22.     _URL_="ajax_tut.php?"
    23.     _objetus.open("GET",_URL_+"&"+_values_send,true);
    24.     _objetus.onreadystatechange=function() {
    25.         if (_objetus.readyState==4)
    26.         {
    27.                  if(_objetus.status==200)
    28.          {
    29.                  target="nuestrodiv_id"      
    30.                  document.getElementById(target).innerHTML=_objetus.responseText;
    31.                  }
    32.         }
    33.     }
    34.     _objetus.send(null);
    35.     return
    36. }
    37. </script>
    38. <input type="button" name="visual" value="Pedir" onclick="primer_tope();">
    39. <!-- aqui se carga el resultado -->
    40. <div id="nuestrodiv_id"></div>
    PHP [fin]





    Bueno eso fué nuestro tope básico con AJAX.

  12. Ejemplos
    Bueno es hora de realizar algunos ejemplos útiles, si quieres algún ejemplo específico comentalo y trataré de realizarlo.

    • Verificando la existencia de una URL: Bueno en este ejemplo verificaremos si existe o no una URL.
      NOTA
      Hice una primera prueba ejemplo 3 Que NO FUNCIONA porque devuelve un error javascript:
      Error: uncaught exception: Permiso denegado al llamar al método XMLHttpRequest.open
      Averiguaré sobre el mismo, este ejemplo funciona si las URL`S que vamos a comprobar se encuentran en el servidor, pero si estan fuera del mismo no funciona...... bueno es de una utilidad NULA el ejemplo 3 pero no usaba un procesador para verificar la existencia de una URL.

      En el ejemplo 4 ya se una usa un cliente y un procesador y funciona en sus totalidad.

      Esto es sencillo, al abrir una URL verificaremos el _objetus.status, si el mismo devuelve 200 existe si devuelve 404 no existe.

      Ejemplo 3
      cliente:
      PHP [inicio]
      1. <script language="javascript"  type="text/javascript">
      2. //funcion encarga de crear el objeto
      3. function objetus() {
      4.     try {
      5.         xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
      6.     } catch (e) {
      7.         try {
      8.             xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      9.         } catch (E) {
      10.             xmlhttp = false;
      11.         }
      12.     }
      13.     if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
      14.         xmlhttp = new XMLHttpRequest();
      15.     }
      16.     return xmlhttp
      17. }
      18. function TA_comp_url()
      19. {
      20.     try {
      21.         _objetus=objetus()
      22.         _URL_=document.getElementById('TA_comp_url').value //id URL
      23.         _target=document.getElementById('TA_comp_url_resultado') //id resultado
      24.         _objetus.open("GET",_URL_,true);
      25.         _objetus.onreadystatechange=function() {
      26.             if (_objetus.readyState==1)
      27.             {
      28.                 _target.innerHTML="Comprobando.......";
      29.             }
      30.             else if(_objetus.readyState==4)
      31.             {
      32.                 if(_objetus.status==200)
      33.                 {
      34.                      _target.innerHTML = "La URL <b>SI</b> existe";
      35.                 }
      36.                 else if(_objetus.status==404)
      37.                 {
      38.                      _target.innerHTML = "La URL <b>NO</b> existe";
      39.                 }
      40.                 else
      41.                 {
      42.                      _target.innerHTML = "Error: "._objetus.status;
      43.                 }
      44.             }
      45.         }
      46.         _objetus.send(null);
      47.     }
      48.     catch (e) {
      49.         _target.innerHTML = (e.message)?e.message:e.description;
      50.     }
      51.     return
      52. }
      53. </script>
      54. URL:
      55. <input id="TA_comp_url" type="text" class="text" size="50">
      56. <input class=boton type="button" value="Verificar URL" onclick="TA_comp_url();">
      57. <!-- aqui se carga el resultado -->
      58. <div id="TA_comp_url_resultado"></div>
      PHP [fin]

      URL:


      Ejemplo 4
      cliente
      PHP [inicio]
      1. <script language="javascript"  type="text/javascript">
      2. //funcion encarga de crear el objeto
      3. function objetus() {
      4.     try {
      5.         xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
      6.     } catch (e) {
      7.         try {
      8.             xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      9.         } catch (E) {
      10.             xmlhttp = false;
      11.         }
      12.     }
      13.     if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
      14.         xmlhttp = new XMLHttpRequest();
      15.     }
      16.     return xmlhttp
      17. }
      18. function TA_comp_url2()
      19. {
      20.     _objetus=objetus()
      21.     _uri=document.getElementById('TA_comp_url2').value //id URL
      22.     _target=document.getElementById('TA_comp_url_resultado2') //id resultado
      23.     _values_send="funcion=TA_comp_url2&uri="+_uri
      24.     _URL_="procesador.php?"
      25.     _objetus.open("GET",_URL_+"&"+_values_send,true);
      26.     _objetus.onreadystatechange=function() {
      27.         if (_objetus.readyState==1)
      28.         {
      29.             _target.innerHTML="Comprobando.......";
      30.         }
      31.         else if(_objetus.readyState==4)
      32.         {
      33.             if(_objetus.status==200)
      34.             {
      35.                 _target.innerHTML = _objetus.responseText;
      36.             }
      37.             else
      38.             {
      39.                 _target.innerHTML = "Error: "._objetus.status;
      40.             }
      41.         }
      42.     }
      43.     _objetus.send(null);
      44.     return
      45. }
      46. </script>
      47. URL:<input id="TA_comp_url2" type="text" size="50">
      48. <input type="button" value="Verificar URL" onclick="TA_comp_url2();">
      49. <!-- aqui se carga el resultado -->
      50. <div id="TA_comp_url_resultado2"></div>
      PHP [fin]

      procesador
      PHP [inicio]
      1. if(isset($_GET['funcion']))
      2. {
      3.     $_valor=$_GET['funcion'];
      4.     if ($_valor=="TA_comp_url2")
      5.     {
      6.         $_r=(!isset($_GET['uri']))?false:(!@fopen($_GET['uri'],"r"))?false:true;
      7.         $_res=($_r==true)?"La URL existe":"La URL no existe";
      8.         echo $_res;
      9.     }
      10.     else
      11.     {
      12.         echo "No enviaste ningun valor ACEPTABLE";
      13.     }
      14. }
      15. else
      16. {
      17.     echo "No se a enviado valor alguno de peticion";
      18. }
      PHP [fin]

      URL:



    • Manejando listas dependientes en una base de datos:
      Primero creamos las tablas.
      -- MySQL Administrator dump 1.4 -- -- ------------------------------------------------------ -- Server version 4.1.5-gamma-nt CREATE DATABASE leimnud2; USE leimnud2; CREATE TABLE `leimnud_tut1_ciudad` ( `id` int(10) unsigned NOT NULL auto_increment, `nombre` varchar(45) NOT NULL default '', PRIMARY KEY(`id`) ) ENGINE=MyISAM; INSERT INTO `leimnud_tut1_ciudad` (`id`,`nombre`) VALUES (1,'lapaz'), (3,'potosi'), (6,'sucre'), (28,'santa cruz'), (33,'cochabamba'), (34,'pando'), (35,'beni'); CREATE TABLE `leimnud_tut1_zona` ( `id` int(10) unsigned NOT NULL auto_increment, `nombre` varchar(45) NOT NULL default '', `id_ciudad` int(10) unsigned NOT NULL default '0', PRIMARY KEY(`id`) ) ENGINE=MyISAM; INSERT INTO `leimnud_tut1_zona` (`id`,`nombre`,`id_ciudad`) VALUES (1,'el alto',1), (2,'miraflores',1), (3,'sopocachi',1), (4,'villa dolores',1), (5,'san pedro',1), (6,'el prado',1), (7,'tejada sorzano',1), (52,'pando-1',34), (51,'ciudad4',35), (50,'ciudad3',35), (48,'ciudad 1',35), (49,'ciudad 2',35), (15,'paraiso',6), (16,'andrea',6), (18,'comercial algo',6), (19,'otra zona',6), (53,'pando-2',34), (56,'san fernando',33), (57,'santo tomas',33), (29,'viacha',1), (55,'santa clara',33), (37,'zona nueva',28);
      Ejemplo 5
      cliente
      PHP [inicio]
      1. <script language="javascript"  type="text/javascript">
      2. /*******************************************************************
      3. * Funciones ejemplo-5 AJAX - BEGIN
      4. *******************************************************************/
      5. function objetus() {
      6.         try {
      7.                 xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
      8.         } catch (e) {
      9.                 try {
      10.                          xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      11.                 } catch (E) {
      12.                          xmlhttp = false;
      13.                 }
      14.         }
      15.         if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
      16.                 xmlhttp = new XMLHttpRequest();
      17.         }
      18.         return xmlhttp
      19. }
      20. /*******************************************************************************
      21. * ejemplo 5 BEGIN
      22. *******************************************************************************/
      23. function ejemplo5_start()
      24. {
      25.         ej5_P();
      26.         return
      27. }
      28. function ej5_P()
      29. {
      30.         _objetus=objetus()
      31.         _target=document.getElementById('ej5_td_P')
      32.         document.getElementById('ej5_mensajes').innerHTML = "";
      33.         _target.style.display=''
      34.         _values_send="funcion=ejemplo5&opcion=padre"
      35.         _URL_="procesador.php?"
      36.         _objetus.open("GET",_URL_+"&"+_values_send,true);
      37.         _objetus.onreadystatechange=function() {
      38.                 if (_objetus.readyState==1)
      39.                 {
      40.                          (_target.innerHTML=='')?(_target.innerHTML="Cargando Ciudades"):null;
      41.                 }
      42.                 else if(_objetus.readyState==4)
      43.                 {
      44.                          if(_objetus.status==200)
      45.                          {
      46.                                  _target.innerHTML = _objetus.responseText;
      47.                                  document.getElementById('ej5_td_H').style.display=''
      48.                                  ej5_H(document.getElementById('ej5_P').value);
      49.                                  document.getElementById('ej5_td_submit').style.display=''
      50.                                  document.getElementById('ej5_add_P').style.display=''
      51.                                  document.getElementById('ej5_add_H').style.display=''
      52.                          }
      53.                 }
      54.         }
      55.         _objetus.send(null);
      56. }
      57. function ej5_H(idena)
      58. {
      59.         _objetus=objetus()
      60.         _target=document.getElementById('ej5_td_H')
      61.         _loader=document.getElementById('ej5_loader')
      62.         _values_send="funcion=ejemplo5&opcion=hijo&id="+idena
      63.         _URL_=