Actualizar Xajax 0.2 a Xajax 0.5

  • Por
  • Ajax
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.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

NiñoPerro

29/9/2008
para que funcione el ejemplo debemos hacer esto

<?php
//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);

//asociamos la función creada al objeto xajax
$xajax->registerFunction("select_combinado");
$xajax->registerFunction("generar_select");

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

.
.
.
?>

Befranel

16/10/2008
Buen dia, me podrian indicar donde consigo la clase xajax.inc.php que mencionan en el codigo.

Gracias Saludos cordiales.

Carlos

07/11/2008
El código del ejemplo funciona perfectamente, la funcion que comentas registerFunction funciona pero ya está obsoleta y se cambió por register.
Saludos

Ali

11/11/2008
Esa clase la pillas de http://xajaxproject.org/

Nahuel

09/1/2009
Esplendido. Eres un buen profesional

Alex von Chrismar

28/7/2009
Error en links
Hola<br />
<br />
En el manual xajaxo-5 el ejemplo tiene un error... un detalle. Envio el links<br />
<br />
http://www.desarrolloweb.com/articulos/ejemplos/ajax/xajax0-5/selects_combinados.php<br />
<br />
Felicitaciones por su pagina. Es excelente<br />
<br />
Salu2<br />
Alex<br />
Chile -&gt; Santiago

KIKE

10/9/2009
GRACIAS
Empiezo a indagar en esto del ajax y tu ejemplo me sirvio bastante....
funciona a la perfeccion
Gracias!!!!!!!!

Alan

23/2/2010
NO me carga los select :S
He revisado una y otra ves el codigo y no consigo ver cual es el problema , de hecho me ocurre lo mismo del ejemplo que se encuentra en la pagina , que intenta cargar pero al final no carga nada y no entiendo porque. En mi pagina tengo un header que lo incluyo en cada pagina que vaya haciendo por ende ahi inclui las librerias de xajax y el $xajax->printJavascript("xajax/"); sin emabrgo noe tniendo porque no me funciona. Les agrego el codigo para que me ayduen porfavor :):

ESTE ES EL FORM:

<form id="form" name="form" >

<table>
<tbody>
<tr>
<th>Seleccione Marca:</th>
<td>
<select name="lista_marcas" id="lista_marcas" style="font-size: 100%;" onchange="xajax_generar_select(document.form.lista_marcas.options[document.form.lista_marcas.selectedIndex].value)" >
<option value=0> [Seleccione Marca]</option>
<?
$registros = mysql_query("SELECT id_marca,nombre FROM marca order by nombre", $link) or die ("Problemas en el select:".mysql_error());
while ($reg = mysql_fetch_array($registros))
{

echo ' <option value="'.$reg["id_marca"].'">'.$reg["nombre"].'</option>';

}
mysql_free_result($registros);
?>
</select>

<label class="error" for="lista_marcas" id="error_lista">
Este campo es requerido.
</label>

</td>
</tr>
<tr>
<th>Seleccione Modelo:</th>
<td>

<div id="seleccombinado">


</div>
</td>
</tr>

</tbody>
</table>

</form>

ESTE ES EL CODIGO EN PHP:

<?php
include ("php/header.php");
include ("php/conectar.php");

$xajax->setCharEncoding('ISO-8859-1');
$xajax->configure('decodeUTF8Input',true);

//asociamos la función creada anteriormente al objeto xajax
$xajax->register(XAJAX_FUNCTION,"generar_select");
$xajax->register(XAJAX_FUNCTION,"select_combinado");
//El objeto xajax tiene que procesar cualquier petición
$xajax->processRequest();

function select_combinado($id_marca){


//creo las distintas opciones del select
$nuevo_select = "<select name='lista_modelos'>";

$registros = mysql_query("SELECT id_modelo,nombre FROM modelo order by nombre WHERE id_marca='".$id_marca."'", $link) or die ("Problemas en el select:".mysql_error());
while ($reg = mysql_fetch_array($registros))
{
$nuevo_select .= '<option value="' . $reg["id_modelo"] . '">' . $reg["nombre"] . '</option>';

}
mysql_free_result($registros);

$nuevo_select .= "</select>";
return $nuevo_select;
}

function generar_select($id_marca){
//instanciamos el objeto para generar la respuesta con ajax
print "<script>alert('$id_marca')</script>";
$respuesta = new xajaxResponse();
$respuesta->setCharacterEncoding('ISO-8859-1');

if ($id_marca==0){
//escribimos el select de modelos vacío
$nuevo_select = '<select name="lista_modelos">
<option value="0">Elegir Modelo</option>
</select>';
}else{
$nuevo_select = select_combinado($id_marca);
}
//escribimos en la capa con id="seleccombinado"
$respuesta->assign("seleccombinado","innerHTML",$nuevo_select);

//tenemos que devolver la instanciación del objeto xajaxResponse
return $respuesta;
}

?>

Y ESTE ES EL HEADER QUE INCLUYO EN CADA PAGINA

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Itransfer Itron Chile</title>
<meta name="keywords" content="" />
<meta name="description" content="" />
<link href="css/style.css" rel="stylesheet" type="text/css" />
<script src="js/jquery-1.3.2.min.js" type="text/javascript" ></script>
<script src="js/jquery.MultiFile.pack.js" type="text/javascript" ></script>
<script src="js/jquery.js" type="text/javascript"></script>
<script src="js/ui.datepicker.js" type="text/javascript"></script>
<LINK rel="stylesheet" type="text/css" href="css/datepicker.css">
<link href="css/demo_table.css" rel="stylesheet" type="text/css" />
<link href="css/demo_page.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" language="javascript" src="js/jquery.dataTables.js"></script>
<script type="text/javascript" src="js/shadowbox/shadowbox.js"></script>
<link rel="stylesheet" type="text/css" href="js/shadowbox/shadowbox.css">
<script type="text/javascript">

Shadowbox.init({
language: 'es',//lengiaje español
players: ['img', 'html', 'iframe', 'wmp']
});

</script>
<?php

require ('xajax/xajax_core/xajax.inc.php');
//instanciamos el objeto de la clase xajax
$xajax = new xajax();

//En el indicamos al objeto xajax se encargue de generar el javascript necesario
$xajax->printJavascript("xajax/");
?>
</head>

<body>
<div id="wrapper">
<div id="header">
<div id="logo">
<img src="img/itron.gif"/>
</div>
<!-- end div#logo -->
<div id="menu">
<ul>
<li class=""><a href="index.php">Inicio</a></li>
<li><a href="admin.php">Admin</a></li>
<li><a href="nueva_carpeta.php">Contacto</a></li>
<li><a href="#">Ayuda</a></li>
</ul>
</div>
<!-- end div#menu -->
</div>
<!-- end div#header -->

ESPERO QUE ME AYUDEN PK NECESITO URGENTE HACER ESTOO ... SE LOS AGRADESZCO A TODOS DE ANTEMANO



ALAN =)

Ricardo Rios

06/8/2010
No funciona bien
No funciona bien, en el sitio, cuando hacen algun cambio en el primer select se queda pensando y no hace nada, copie el codigo y lo modifique segun mis necesidades, y le active el debug, y seguro le pone lo mismo que a ustedes:

xajax debug output
Fri Aug 06 2010 16:30:32 GMT-0400

ERROR: ResponseReceived: Invalid response XML: The response contains an unexpected tag or text: {data}.

Fri Aug 06 2010 16:30:32 GMT-0400

RECEIVED [status: 200, size: 1235 bytes, time: 99ms]:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xjx>
<cmd cmd="as" id="seleccombinado1" prop="innerHTML"><select name='codigoprovincia' id='codigoprovincia'><option selected='selected'>...</option><option value='000'>No Seleccionada</option><option value='001'>Distrito Capital</option><option value='015'>Miranda</option><option value='024'>Vargas</option><option value='005'>Aragua</option><option value='008'>Carabobo</option><option value='009'>Cojedes</option><option value='002'>Amazonas</option><option value='007'>Bol&iacute;var</option><option value='010'>Delta Amacuro</option><option value='017'>Nueva Esparta</option><option value='025'>Dependencias Federales</option><option value='014'>M&eacute;rida</option><option value='020'>T&aacute;chira</option><option value='021'>Trujillo</option><option value='004'>Apure</option><option value='006'>Barinas</option><option value='012'>Gu&aacute;rico</option><option value='018'>Portuguesa</option><option value='003'>Anzo&aacute;tegui</option><option value='016'>Monagas</option><option value='019'>Sucre</option><option value='011'>Falc&oacute;n</option><option value='013'>Lara</option><option value='022'>Yaracuy</option><option value='023'>Zulia</option></select></cmd>
</xjx>

Fri Aug 06 2010 16:30:31 GMT-0400

SENT [55 bytes]

Fri Aug 06 2010 16:30:31 GMT-0400

SENDING REQUEST

Fri Aug 06 2010 16:30:31 GMT-0400

CALLING:
xjxfun: generar_select
URI:
http://localhost/gobernacion4/formularios/ficha_proyecto1.php?recordID=1

Fri Aug 06 2010 16:30:31 GMT-0400

POST: xjxfun=generar_select
&xjxr=1281126631956
&xjxargs[]=SVEN

Fri Aug 06 2010 16:30:31 GMT-0400

INITIALIZING REQUEST OBJECT

Fri Aug 06 2010 16:30:31 GMT-0400

PREPARING REQUEST

Fri Aug 06 2010 16:30:31 GMT-0400

PROCESSING PARAMETERS [1]

Fri Aug 06 2010 16:30:31 GMT-0400

INITIALIZING REQUEST

Fri Aug 06 2010 16:30:31 GMT-0400

STARTING XAJAX REQUEST

Adrian Ramirez

23/8/2010
Error al ejecutar
Hola que tal, soy aprendiz en esto de la programacion y desarrollo web, he estado leyendo alguna documentacion sobre ajax y php, por lo tanto estuve probando el ejemplo que muestran anteriormente, pero tengo un problema, al ejecutarlo me sale lo sig:

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 = ""; return $nuevo_select; } function generar_select($cod_provincia){ $respuesta = new xajaxResponse(); $respuesta->setCharacterEncoding('ISO-8859-1'); if ($cod_provincia==999){ $nuevo_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(); ?> printJavascript("xajax/"); ?>
Provincia: AQUI LOS PAISES SIN PROBLEMA


Selecciona Población:
Por DesarrolloWeb.com!

Me podrian ayudar a desifrar porque me envia esto??

estoy suando dreamweaver y xampp, ya baje el xajax de la pagina que mencionan.

saludos.

Pedro

01/10/2010
Adrian
Adrián luego del signo "?" debes agregarle php asi ---> <?php

ita_salcedo

27/10/2010
xajax
excelente el manual, mi pregunta como hago para que en lugar de enviar a un capa envie por ejemploa un text

Miguel Angel

24/4/2012
Error
la funcion select_combinado no funciona cuando dentro de ella hago un mysql_query()! Que puede ser el problema?? Ya hice pruebas y el error esta en esa linea:
$sql=mysql_query("select * from categorias where seccion = ".$seccion,$link);
y si quito la linea de la funcion, esta funca bien!

Miguel

24/4/2012
ERROR
Me muestra los siguientes errores

Deprecated: Assigning the return value of new by reference is deprecated in C:xampphtdocsxajaxxajaxxajax_corexajax.inc.php on line 360

Deprecated: Assigning the return value of new by reference is deprecated in C:xampphtdocsxajaxxajaxxajax_corexajax.inc.php on line 1305

Strict Standards: Only variables should be assigned by reference in C:xampphtdocsxajaxxajaxxajax_corexajaxPluginManager.inc.php on line 286

Strict Standards: Only variables should be assigned by reference in C:xampphtdocsxajaxxajaxxajax_corexajaxPluginManager.inc.php on line 286

Strict Standards: Only variables should be assigned by reference in C:xampphtdocsxajaxxajaxxajax_corexajaxPluginManager.inc.php on line 286

Strict Standards: Only variables should be assigned by reference in C:xampphtdocsxajaxxajaxxajax_corexajaxPluginManager.inc.php on line 286

Matías

27/6/2013
No funciona con select multiple
Tengo un select multiple en el que elijo varias carreras en una universidad, en el select combinado tengo que mostrar los planes de cada carrera que elijo, ¿cómo tengo que pasar el parámetro a la funcion xajax_generar_select?
Agradecería su respuesta, de no ser posible, les pìdo me disculpen la molestia.

matas_de_anquin

27/6/2013
No funciona con select multiple
Tengo un select multiple en el que elijo varias carreras en una universidad, en el select combinado tengo que mostrar los planes de cada carrera que elijo, ¿cómo tengo que pasar el parámetro a la funcion xajax_generar_select?
Agradecería su respuesta, de no ser posible, les pìdo me disculpen la molestia.

sib

30/8/2013
Se sigue manteniendo xajax
Para mi el encontrar xajax fué maravilloso, pero despues que lo he empezado a utilizar, me encuentro que me da dolores de cabeza pues hay cuestiones que funcionan en unos navegadores como es espera pero hay otros en los que no, concretamente una consulta a una base de datos mysql al montarla en una tabla en html, cuando se leen más de un registro solo obtengo el resultado esperado en crame y en opera, pero no en IE ni en mozilla. En estos solo funciona si solo leo una fila.
Si hago lo mismo con jquery si funciona, de aquí mi pregunta.
¿Esta XAJAX obsoleto?
¿Es mejor dejar de utilizarlo?
Estaría encantado de recibir una respuesta, gracias.