Mi blog de notas

Cadenas bien formadas


AJAX en 30 segundos

El otro día me topé con un correo que escribió Rasmus Lerdordf (el de PHP) hace unos meses, burlándose un poco de todo el bombo que se ha formado en torno a la palabra AJAX, una técnica que ya se usaba desde hace tiempo sin tan telamonio nombre. Lo bueno es que al mismo tiempo da una explicación de la técnica que se lee en 30 segundos.

Encuentro todo este bombo del AJAX un poco exagerado. Mucha gente ha estado haciendo cosas parecidas mucho antes de que se convirtiera en "AJAX". Y en realidad no es tan complicado como mucha gente pretende hacerlo ver. Esto es un ejemplo de una de mis aplicaciones. Primero el Javascript:

function createRequestObject() {
    var ro;
    var browser = navigator.appName;
    if(browser == "Microsoft Internet Explorer"){
        ro = new ActiveXObject("Microsoft.XMLHTTP");
    }else{
        ro = new XMLHttpRequest();
    }
    return ro;
}

var http = createRequestObject();

function sndReq(action) {
    http.open('get', 'rpc.php?action='+action);
    http.onreadystatechange = handleResponse;
    http.send(null);
}

function handleResponse() {
    if(http.readyState == 4){
        var response = http.responseText;
        var update = new Array();

        if(response.indexOf('|' != -1)) {
            update = response.split('|');
            document.getElementById(update[0]).innerHTML = update[1];
        }
    }
}

Esto crea un objeto request además de una función para enviar la petición y otra para manejar la respuesta. Así que para usarla podríais incluir este js en vuestra página. Luego, para hacer una de esas peticiones traseras tendríais que asociarla a algo. Como un evento onclick o un href directo como este:

  <a href="javascript:sndReq('foo')">[foo]</a>

Esto significa que cuando alguien pulse en este enlace, lo que sucede realmente es que se enviará una petición a rpc.php?action=foo.

En rpc.php podéis tener algo como esto:

  switch($_REQUEST['action']) {
    case 'foo':
      /* hacer algo */
      echo "foo|foo hecho";
      break;
    ...
  }

Ahora mirad handleResponse. Analiza la cadena "foo|foo hecho" y la divide con el '|', y usa lo que haya antes del '|' como el elemento dom id de vuestra página y la parte de detrás como el nuevo innerHTML de ese elemento. Esto significa que si tenéis una etiqueta div como esta en vuestra página:

  <div id="foo">
  </div>

Una vez que pulséis en ese enlace, esto cambiará dinámicamente a:

  <div id="foo">
  foo hecho
  </div>

Eso es todo lo que hay. Todo lo demás es construir sobre esto. Sustituír la sencilla sintaxis de mi respuesta "id|texto" por un formato XML más rico y también hacer la petición mucho más complicada. Antes de que instalar ciegamente grandes librerías "AJAX", probad a escribir vuestra propia funcionalidad y así sabréis exactamente cómo funciona y sólo lo complicaréis lo necesario. A menudo no se necesita mucho más de lo que he mostrado aquí.

Por ejemplo, sería muy sencillo extender un poco este ejemplo para que envíe varios parámetros en la petición. Algo como:

  function sndReqArg(action,arg) {
    http.open('get', 'rpc.php?action='+action+'&arg='+arg);
    http.onreadystatechange = handleResponse;
    http.send(null);
  }

Y vuestro handleResponse puede extenderse fácilmente para que haga cosas mucho más interesantes que sólo reemplazar el contenido de un div.

-Rasmus


Vale, a mí me ha costado más de 30 segundos, pero se entiende muy bien y el tema es más sencillo de lo que yo pensaba. Para probar he hecho un pequeño fortune ajaxizado que ejecuta fortune en otro servidor y recibe la salida. ¡Ahora con indicador de actividad web2.0 compliant!


2006-03-18, 05:12 | Enlace permanente | 15 comentarios |

Referencias (TrackBacks)

URL de trackback de esta historia http://chewie.blogalia.com//trackbacks/38388

Comentarios

1
De: Algernon Fecha: 2006-03-18 11:32

Estoy pensando cómo podría aplicarse a una plantilla de Blogalia...

Hmmm...



2
De: Chewie Fecha: 2006-03-18 15:00

Algernon: Pues malamente, porque normalmente un navegador se negará a conectarse por javascript a un servidor que no sea el de la página que hace la petición. Me explico:

Desde http://fbenedetti.blogalia.com/historias/12345 no podrías conectar con por ejemplo http://faberitius.com/rpc.php sin configurar el navegador correctamente (que en el caso de Mozilla no está por defecto). La página tendría que estar también en http://faberitius.com. Por eso he tenido que usar un <object>.



3
De: Algernon Fecha: 2006-03-18 15:19

Jo :/



4
De: teo Fecha: 2006-03-21 13:38

¿Y si te cambio el 'fortune -s' por 'fortune -s -o'? :-P



5
De: jurbo Fecha: 2006-03-27 10:55

Es que no tienes más :)

Échale un ojo a prototype (http://prototype.conio.net/).

Un saludete.



6
De: fabrizio Fecha: 2006-05-16 23:14

bella immagine
saludos



7
De: Marcos Fecha: 2006-05-23 12:33

¡Quita el botón de ahí, no puedo parar de pulsarlo! ;-)



8
De: Stanislav Riley Fecha: 2019-02-25 01:33

Los supuestos son apoyados por los hechos. free scary games



9
De: david Fecha: 2019-06-18 01:04

very nice post.
لعبة من سيربح المليون
لعبة جاتا
لعبة صب واي
لعبة زوما



10
De: free fire garena Fecha: 2019-06-18 04:14

I'll just find this amazing article and i really love reading it.



11
De: Ankita Tiwari Fecha: 2019-08-29 10:52

Kolkata College Girls Escorts
Kolkata housewife Girls
Kolkata Vip Escorts
Kolkata High profile Escorts
Kolkata College Escorts



12
De: Mumbai Escorts Fecha: 2019-08-31 11:43


I fell love with this article minuet i saw the topic. It is glad to see that such good articles are still exist in the current world. Keep posting.

http://www.sweetypatel.com/


Mumbai Escorts


Escorts Mumbai


Mumbai Call Girls


Mumbai Escort


Mumbai Independent Escorts


Escorts Mumbai


Mumbai Elite Escorts


Mumbai VIP Escorts


Escorts in Mumbai


Mumbai Escorts Services


Female Escorts


Mumbai Female Escorts



13
De: activate espn Fecha: 2019-11-01 12:49

Ahaa, its good dialogue concerning this piece of writing at this
place at this web site, I have read all that, so at this time me also commenting
here.
best web hosting
roku.com/link
roku.com/link
espn.com/activate
mcafee.com/activate
espn.com/activate
garmin updates
Dell printer customer service
link text



14
De: dr meads Fecha: 2019-11-14 08:28

Buy Research Chemicals
Ketamine Powder for sale,buy legal ketamine online,buy scopolamine powder online,powder that makes you say yes original
?
nembutals for sale
Buy Pentylone Online
buy-1p-lsd-pellets-online,lsd online kaufen,lsd kaufen online
buy-4-c-pvp-online



15
De: kolkata escort Fecha: 2019-11-14 21:01

kolkata Escorts
kolkata Escort
kolkata Independent Escorts
kolkata call girl
kolkata Escort Service

escort in kolkata
escorts in kolkata
independent escort in kolkata
kolkata Independent Escort

kolkata Escort service
kolkata Escorts Services
Escort Service In Kolkata
Escorts Call Girl
Independent Call Girl
Independent Call Girls

Independent Escort
Independent Escorts
call girl
call girls
escort
escorts
escorts service
escort service
international sex guide kolkata
call girls near me
call girlfriend relationship
escort services
kolkata sex
call girl in kolkata
escort service in kolkata
girls whatsapp numbers
online girls
female escorts
female escort
call girl names and mobile number
call girl kolkata
escorts service
massage in kolkata
girls phone number
indian massage parlour sex
girls whatsapp number
escorts services
call girl no
call girls kolkata
beautiful sexy girls
escort kolkata
college girls hot
call girls whatsapp number
escort service kolkata




Cacharros