> Manuales > Trabajo con Ajax en PHP utilizando Xajax

Indicaciones para actualizar tus scripts de Ajax y PHP con las librerías Xajax, de Xajax 0.2 a Xajax 0.5.

En el manual de Xajax publicado en DesarrolloWeb.com, hasta el momento de escribir este artículo, estábamos trabajando con la versión 0.2.5 del framework Xajax, dado que era la que se ofrecía como "estable" para descarga desde la web de Xajax. Pues bien, a principios de agosto de 2008 se ha publicado la "release candidate" de Xajax 0.5, con lo que llega la hora de ponerse manos a la obra a actualizar nuestros scripts realizados con Xajax.

Así pues, vamos a publicar a continuación unas indicaciones para hacer el upgrade de versiones. Afortunadamente, en la propia web de Xajax han publicado una receta con una serie de referencias adicionales sobre métodos que han cambiado de nombre o de manera de acceder a ellos. Podemos ver esas referencias, aunque en inglés en esta página:

http://xajaxproject.org/docs/upgrading-from-xajax-0.2-to-xajax-0.5.php

No obstante, resumimos en este artículo de desarrollo web .com aquí los principales puntos.

1. Instalar Xajax 0.5

Como primera recomendación, en la página web de Xajax, nos informan que debemos hacer una copia de seguridad de la distribución de Xajax que tuviésemos trabajando anteriormente en nuestro servidor. Luego, debemos borrar los archivos y el directorio. En su lugar debemos poner luego los archivos de la nueva versión Xajax 0.5. Insisten en que se debe borrar la instalación antigua, y no instalar xajax 0.5 en ningún caso sobre el directorio donde tuviéramos las librerías de la versión anterior.

2. Actualizar los includes

Debemos revisar los includes para incluir Xajax en nuestros scripts PHP, puesto que la estructura de directorios del framework ha cambiado en la versión 0.5, para separar los códigos PHP de los códigos Javascript. Los archivos PHP están ahora en xajax_core y los Javascript en xajax_js.

3. Actualiza la sintaxis

La versión Xajax 0.5 RC1 es ya la versión definitiva que se va a presentar, de modo que, aunque se encuentre en Release Candidate aun, no va a revestir cambios significativos.

La mayoría de cambios de sintaxis que tendremos que hacer de cara a actualizar a la versión 0.5 son relativos a funciones, que se han quedado obsoletas y ahora llevan otros nombres o dependen de otras clases. Esas referencias debemos actualizarlas, puesto que en el futuro van a desaparecer las funciones marcadas como obsoletas.

Los métodos más destacables que tienen nuevos nombres:

Métodos de la clase xajax

El antiguo método $xajax->processRequests(); ahora se llama $xajax->processRequest();

Todas las configuraciones boleanas como $xajax->debugOn(); y $xajax->outputEntitiesOn(); se han transformado en $xajax->setFlag('debug',true); y $xajax->setFlag('outputEntities',true);

$xajax->setFlags(); ahora también puede recibir arrays como $xajax->setFlags(array('debug'=>true,'outputEntities'=>true));

El método $xajax->registerFunction se ha marcado como obsoleto por la existencia de la nueva función $xajax->register(); Esta nueva función register recibe dos parámetros. El primero es el tipo de aquello que queremos registrar y el segundo es su nombre. Por ejemplo, para el caso de registrar una función se haría:

$xajax->register(XAJAX_FUNCTION, 'nombre_de_la_funcion');

Métodos de la clase xajaxResponse

La mayoría de los métodos de xajaxResponse han cambiado. Han suprimido una parte que se consideraba confusa en los nombres de métodos. Resulta que muchos comenzaban por add y se ha quitado. Por ejemplo xajaxResponse->addAssign() ahora es xajaxResponse->assign();

Ejemplo de actualización de script Xajax

Ahora voy a hacer una actualización de un script que había creado anteriormente en el manual con Xajax 0.2 a Xajax 0.5. Es un script para hacer selects combinados que vimos en el artículo Selects combinados con Ajax y PHP. Os recomiendo leer el artículo para entender lo que hace el script, que no lo voy a explicar aquí.

Simplemente voy a colocar aquí el código nuevo, marcando en negrita, para que queden bien claros los cambios que he realizado.

<?
//incluímos la clase ajax
require ('xajax/xajax_core/xajax.inc.php');

//instanciamos el objeto de la clase xajax
$xajax = new xajax();
$xajax->setCharEncoding('ISO-8859-1');
$xajax->configure('decodeUTF8Input',true);

function select_combinado($id_provincia){
   $madrid = array("Madrid", "Las Rozas", "Móstoles", "San Sebastián de los Reyes");
   $valencia = array("Valencia", "La Eliana", "Paterna", "Cullera");
   $barcelona = array("Barcelona", "Badalona");
   $leon = array ("León", "Astorga", "Villamejil");
   $poblaciones = array($madrid, $valencia, $barcelona, $leon);
   
   $nuevo_select = "<select name='poblaciones'>";
   
   for ($i=0; $i<count($poblaciones[$id_provincia]); $i++){
   //for ($i=0; $i<2; $i++){
      $nuevo_select .= '<option value="' . $i . '">' . $poblaciones[$id_provincia][$i] . '</option>';
   }
   $nuevo_select .= "</select>";
   return $nuevo_select;
}

function generar_select($cod_provincia){
   $respuesta = new xajaxResponse();
   $respuesta->setCharacterEncoding('ISO-8859-1');
   
   if ($cod_provincia==999){
      $nuevo_select = '<select name="poblaciones">
                  <option value=0>Elegir provincia</option>
                  </select>
                  ';
   }else{
      $nuevo_select = select_combinado($cod_provincia);
   }
   $respuesta->Assign("seleccombinado","innerHTML",$nuevo_select);
   
   return $respuesta;
}
   
$xajax->register(XAJAX_FUNCTION, 'generar_select');

//El objeto xajax tiene que procesar cualquier petición
$xajax->processRequest();
?>

<html>
<head>
   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1">
   <title>Selects combinados en PHP y Ajax - Desarrolloweb.com</title>
   <?
   //Esta línea no cambia porque el printJavascript sigue recibiendo
   //la ruta a la carpeta raíz donde están las librerías xajax.
   $xajax->printJavascript("xajax/");
   ?>
</head>

<body>

<form name="formulario">
Provincia:
<br>
<select name="provincia" onchange="xajax_generar_select(document.formulario.provincia.options[document.formulario.provincia.selectedIndex].value)">
<option value="999">Selecciona la provincia</option>
<option value=0>Madrid</option>
<option value=1>Valencia</option>
<option value=2>Barcelona</option>
<option value=3>León</option>
</select>
<br>
<br>
Selecciona Población: <div id="seleccombinado">
<select name="poblaciones">
<option value=0>Elegir provincia</option>
</select>
</div>
</form>
Por DesarrolloWeb.com!
</body>
</html>


Este ejemplo de Xajax 0.5 se puede ver en marcha en una página aparte.

Para una referencia completa de funciones que han cambiado de Xajax 0.2 a Xajax 0.5 podemos visitar el artículo que había comentado antes de la documentación de Xajax, que contiene abajo del todo un listado de referencia rápida de funciones nuevas y antiguas.

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual