10 505 bytes afegits
, 18:34 25 març 2009
'''AJAX''', acrònim de '''''A'''synchronous '''J'''avaScript '''A'''nd '''X'''ML'' ([[JavaScript]] asíncron i [[XML]]), és una tècnica de desenrollament [[web]] per a crear aplicacions interactives o '''[[Rich Internet Application|RIA]]''' (Rich Internet Applications). Estes aplicacions s'eixecuten en el [[Client (informàtica)|client]], és a dir, en el navegador dels usuaris mentres es manté la comunicació [[asíncron|asíncrona]] en el servidor en segon pla. D'esta manera és possible realisar canvis sobre les pàgines sense necessitat de recarregar-les, la qual cosa significa aumentar la interactivitat, velocitat i [[usabilitat]] en les aplicacions.
Ajax és una tecnologia asíncrona, en el sentit que les senyes adicionals es requerixen al servidor i es carreguen en segon pla sense interferir en la visualisació ni el comportament de la pàgina. [[JavaScript]] és el llenguage interpretat (scripting language) en el que normalment s'efectuen les funcions de crida d'Ajax mentres que l'accés a les senyes es realisa per mig de ''[[XMLHttpRequest]]'', objecte disponible en els navegadors actuals. En tot cas, no cal que el contingut asíncron estiga formatat en [[XML]].
Ajax és una tècnica vàlida per a múltiples plataformes i utilisable en molts sistemes operatius i navegadors atés que està basat en estàndarts oberts com JavaScript i [[Document Object Model]] (DOM).
== Tecnologies incloses en AJAX ==
AJAX és una combinació de quatre tecnologies ya existents:
* '''[[XHTML]]''' (o '''[[HTML]]''') i [[fulls d'estils en cascada]] (CSS) per al disseny que acompanya a la informació.
* [[Document Object Model]] (DOM) accedit en un llenguage de scripting per part de l'usuari, especialment implementacions [[ECMAScript]] com [[JavaScript]] i [[JScript]], per a mostrar i interactuar dinàmicament en la informació presentada.
* L'objecte '''[[XMLHttpRequest]]''' per a intercanviar dades de forma asíncrona en el servidor web. En alguns [[framework]]s'i en algunes situacions concretes, s'usa un objecte <tt>[[iframe]]</tt> en lloc del XMLHttpRequest per a realisar els dits intercanvis.
* [[XML]] és el [[format]] usat generalment per a la transferència de senyes solicitades al servidor, encara que qualsevol format pot funcionar, incloent HTML preformatat, text pla, [[JSON]] i fins a [[EBML]].
Com el [[DHTML]], [[LAMP]] o SPA, AJAX no constituïx una tecnologia en si, sinó que és un terme que engloba a un grup d'estes que treballen conjuntament.
== Antecedents d'AJAX ==
A pesar que el terme «AJAX» fòra creat en 2005, la història de les tecnologies que permeten AJAX es remunta a una década abans en la iniciativa de [[Microsoft]] en el desenrollament de [[Scripting Remot]]. No obstant, les tècniques per a la càrrega asíncrona de continguts en una pàgina existent sense requerir recarrega completa remonten al temps de l'element <tt>iframe</tt> (introduït en Internet Explorer 3 en 1996) i el tipos d'element <tt>layer</tt> (introduït en Netscape 4 en 1997, abandonat durant les primeres etapes de desenrollament de Mozilla). Abdós tipos d'element tenien l'atribut <code>src</code> que podia prendre qualsevol direcció [[URL]] externa, i carregant una pàgina que continga [[javascript]] que manipule la pàgina Paterna, poden conseguir-se efectes semblants a l'AJAX.
El '''Microsoft's Reme't Scripting''' (o MSRS, introduït en [[1998]]) va resultar un substitut més elegant per a estes tècniques, en enviament de senyes a través d'un [[applet Java]] el qual es pot comunicar en el client usant JavaScript. Esta tècnica va funcionar en abdós navegadors, Internet Explorer versió 4 i Netscape Navigator versió 4. Microsoft la va utilisar en el [[Outlook Web Access]] proveït en la versió 2000 de [[Microsoft Exchange Server]].
La comunitat de desenrrolladors web, primer colaborant per mig del [[grup de notícies]] ''[http://groups.google.es/group/microsoft.public.scripting.remote/topics?lnk=gschg&hl=es microsoft.public.scripting.remote]'' i després usant [[blog]]s, van desenrollar una gamma de tècniques de scripting remot per a conseguir els mateixos resultats en diferents navegadors. Els primers eixemples inclouen la llibreria [[Scripting remot en Javascript|JSRS]] l'any 2000, la introducció a la tècnica [[image/cookie]]<ref name="tecnica_imagen_cookie">[http://www.depressedpress.Com/Content/Development/JavaScript/articles/GIFAsPipe/Index.cfm Using a GIF as a Data Pipe], explicació i eixemple d'us de la tècnica image/cookie (en anglés).</ref> en el mateix any i la tècnica [[JavaScript baix demanda]] (JavaScript on Demand)<ref name="js_on_demand">[http://dotvoid.Com/view.php?id=13 Remote scripting with javascript], Explicació i eixemple de processar un archiu JavaScript baix demanda (en anglés).</ref> en 2002. En eixe any, es va realisar una modificació per part de la comunitat d'usuaris<ref name="modif_usuarios_MSRS_applet_por_js">[http://groups.Google.Ca/group/microsoft.public.scripting.remote/browse_thread/thread/99b7e6152b45b2e7/6b3689e2dc7401dc microsoft.public.scripting.remote], substitució de l'applet Java per l'objecte XMLHttpRequest (en anglés).</ref> al ''Microsoft's Remote Scripting'' per a reemplaçar l'applet Java per [[XMLHttpRequest]].
[[Framework]]s de Scripting Remot com el [[ARSCIF]]<ref name="arscif">[http://arscif.dsi.unimi.it/ ARSCIF], A Framework for Asynchronous Reme't–Script Callback Invocation (en anglés)</ref> van aparéixer en 2003 poc abans que [[Microsoft]] introduïra Callbacks en [[Active Server Pages|ASP]]. NET.<ref name="callback_en_ASPNET">[http://msdn.microsoft.com/msdnmag/issues/04/08/CuttingEdge/ Script Callbacks in ASPE.NET (en anglés)]</ref>
Des que XMLHttpRequest està implementat en la majoria dels navegadors, rarament s'usen tècniques alternatives. No obstant, encara s'utilisen on es requerix una major compatibilitat, una reduïda implementació, o accés creuat entre llocs web. Una alternativa, el [[Terminal SVG]]<ref name="svgt">[http://networkimprov.net/airwrx/awscene.html protocol SVGT] (en anglés).</ref> (basat en [[Scalable Vector Graphics|SVG]]), utilisa una conexió persistent per a l'intercanvi continu entre el navegador i el servidor.
== Navegadors que permeten AJAX ==
Ha de tindre's en conte que esta és una llista general, i el soport de les aplicacions AJAX dependrà de les característiques que el navegador permeta.
* Navegadors basats en [[Gecko (motor de navegació)|Gecko]] com [[Mozilla Application Suite|Mozilla]], [[Mozilla Firefox]], [[SeaMonkey]], [[Camino (navegador)|Camino]], [[K-Meleon]], [[Flock]], [[Epiphany]], [[Galió]] i [[Netscape]] versió 7.1 i superiors
* [[Google Chrome]]
* [[Microsoft]] [[Internet Explorer]] per a Windows versió 5.0 i superiors, i els navegadors basats en ell
* Navegadors en el [[Interfície de programació d'aplicacions|API]] [[KHTML]] versió 3.2 i superiors implementat, incloent [[Konqueror]] versió 3.2 i superiors, [[Apple Computer|Apple]] [[Safari (navegador)|Safari]] versió 1.2 i superiors, i el Web Browser for S60 de [[Nokia]] tercera generació i posteriors
* [[Opera (navegador)|Opera]] versió 8.0 i superiors, incloent [[Opera (navegador)|Opera Mobile Browser]] versió 8.0 i superiors.
== Navegadors que no permeten AJAX ==
* Opera 7 i anteriors
* Microsoft Internet Explorer per a Windows versió 4.0 i anteriors
* Safari, qualsevol versió anterior a la 1.2
* [[Dillo]]
* Navegadors basats en text com [[Lynx (navegador)|Lynx]] i [[Links]]
* Navegadors per a incapacitats visuals ([[Braille (lectura)|Braille]])
== L'enviament de XML del servidor al client<ref name="xmlsc">[http://www.programacionweb.net/cursos/curso.php?num=2 Curs d'AJAX de ProgramacionWeb.Net] (en espanyol).</ref>==
Tal com s'ha explicat, per la seua pròpia definició, AJAX utilisa [[XML]] per a transmetre les dades del [[servidor]] al [[Client (informàtica)|cliente]], perqué el contingut del document XML siga reconegut com a tal pel client és necessari que des del servidor s'especifique el següent encapçalament per a indicar al navegador que el document que seguix és de tipos XML:
'''<code>Content-Type: text/xml</code>'''
Ademés, com les senyes que el servidor mana al client s'hauran generat de forma dinàmica, caldrà procurar que el navegador treballe sempre en l'última versió del document i no en una versió prèvia que puga tindre en la [[caché]]. Per a controlar açò s'afegiran els encapçalaments següents:
'''<code>Trosege-Control: no-trosege, must-revalidate</code>'''
'''<code>Expires: Mon, 01 Jan 2007 01:00:00 GMT</code>'''
A continuació es mostren els comandos necessaris per a enviar estos encapçalaments al client depenent del llenguage de script de servidor utilisat:
=== Encapçalament XML en PHP ===
'''<code><?php</code>'''
'''<code>header("Content-Type: text/xml");</code>'''
'''<code>header("Trosege-Control: no-trosege, must-revalidate");</code>'''
'''<code>header("Expires: Mon, 01 Jan 2007 01:00:00 GMT");</code>'''
'''<code>?></code>'''
=== Encapçalament XML en Perl ===
'''<code>#!/usr/bet/Perl -l</code>'''
'''<code>print "Content-Type: text/xml";</code>'''
'''<code>print "Trosege-Control: no-trosege, must-revalidate";</code>'''
'''<code>print "Expires: Mon, 01 Jan 2007 01:00:00 GMT";</code>'''
=== Encapçalament XML en ASPE ===
'''<code><%</code>'''
'''<code>respon-se.ContentType="text/xml"</code>'''
'''<code>respon-se.CacheControl="no-trosege, must-revalidate"</code>'''
'''<code>respon-se.Expires="Mon, 01 Jan 2007 01:00:00 GMT"</code>'''
'''<code>%></code>'''
=== Encapçalament XML en JSP ===
'''<code><%</code>'''
'''<code>respon-se.setHeader("Content-Type", "text/xml");</code>'''
'''<code>respon-se.setHeader("Expires", "Mon, 01 Jan 2007 01:00:00 GMT");</code>'''
'''<code>respon-se.setHeader("Trosege-Control", "must-revalidate");</code>'''
'''<code>respon-se.setHeader("Trosege-Control", "no-trosege");</code>'''
'''<code>%></code>'''
== Veja's també ==
* [[AjaxCFC]]
* [[AjaXSLT]]
* [[FJAX]]
* [[Streaming|HTTP Streaming]]
* [[JSON|JSON, AJAX sense XML]]
* [[Open Ajax]]
* [[Progressive Enhancement]]
* [[Rich Internet Application]]
* [[Sajax]]
* [[Single Page Application]]
* [[AjaxCore]] AJAX for PHP made easy
* [[Xajax]] ajax for PHP
* [[XMLHttpRequest]]
== Referències ==
{{listaref}}
{{Traduït de|es|AJAX}}
[[Categoria:Navegadors web]]
[[Categoria:Acrònims d'informàtica]]
[[Categoria:XML]]
[[Categoria:Mòduls Perl]]
[[Categoria:Ajax]]