Xajax: Ajax para PHP

  • Por
Una librería PHP que contiene la clase xajax, que permite ejecutar Ajax de una manera sencilla.
Ajax es una tecnología que utiliza a su vez otra combinación de tecnologías, como XML y Javascript, para realizar peticiones de contenido o computación de servidor sin tener que recargar la página en la que está el usuario. Es una tecnología que permite una nueva gama de aplicaciones interactivas en la web, mucho más ricas y rápidas, dado que no precisamos recargar todo el contenido de una página para realizar peticiones al servidor.

Referencia: Puedes ver qué es ajax en este artículo: Qué es AJAX
Tenemos otros artículos que explican Ajax, puedes buscarlos con nuestro directorio, en la categoría Ajax.

Si hemos intentado alguna vez trabajar con Ajax para programar una página web, habremos comprobado que la tarea se complica bastante, teniendo que realizar diferentes trozos de código en distintos lenguajes de programación y en distintos archivos. Todo esto puede provocar dolores de cabeza o páginas con códigos difíciles de entender y de mantener. Esta cuestión sin dudas es uno de los problemas que trae Ajax a los programadores, sobretodo a los que intentan dar sus primeros pasos. Pero herramientas como xajax pueden ayudarnos bastante.

En este artículo vamos a conocer xajax, una clase realizada con PHP que nos permite utilizar Ajax, combinado con PHP, para la creación de aplicaciones interactivas, de una manera muy simplificada. Con xajax podemos fácilmente ejecutar funciones PHP, que se ejecutan en el servidor, cuando el usuario realiza acciones en la página. Luego, los resultados de esas funciones PHP se producen en la misma página, sin que se tenga que recargarse.

Xajax es un producto Open Source gratuito y compatible con los navegadores más comunes, como Firefox, u otros navegadores basados en Mozilla, Internet Explorer, Opera, etc.

Podemos encontrarlo en http://xajax-project.org/

Hacer unas primeras pruebas para comenzar a conocer la herramienta nos llevará pocos minutos. Lo veremos a continuación.

Descargar e instalar xajax

Para probar xajax debemos descargar la última versión de la clase, que podemos descargar directamente desde su página web: http://xajaxproject.org

Obtendremos un archivo comprimido que debemos descomprimir en cualquier lugar de nuestro espacio de publicación. Por ejemplo, podemos crear un directorio llamado xajax donde podemos colocar todos los archivos del .zip descargado.

No hay que hacer especiales acciones para instalar xajax, simplemente descomprimirlo en cualquier servidor Apache o IIS que tenga compatibilidad con PHP 4.3.x o PHP 5.x, o superiores.

Una vez descargado podemos probar los ejemplos que vienen en el directorio examples, siempre a través de nuestro servidor web compatible con PHP, ya sea en local o en un servidor web remoto.

Atención al directorio donde finalmente metemos los archivos de xajax, pues luego tendremos que incluir archivos que hay en dicho directorio, para lo cual deberemos recordar la ruta relativa desde la página donde estemos al directorio donde está xajax.

Página simple con xajax y PHP

Veamos ahora como realizar una página que utilice xajax, para ejecutar una sencilla función PHP como respuesta a una acción del usuario. El ejemplo es relativamente sencillo, incluso lo podemos hacer en pocos pasos, como una receta. Luego se podrá complicar todo lo necesario para realizar acciones más complejas.

1) Incluir con PHP el archivo donde está la clase xajax

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


2) Creamos una instancia de un objeto de la clase xajax

//instanciamos el objeto de la clase xajax
$xajax = new xajax();


3) Escribimos una función en PHP, que luego llamaremos con por medio de ajax

Esta función es todo lo complicado que se requiera. Realizará acciones del lado del servidor y por tanto puede acceder a bases de datos, abrir ficheros o cualquier cosa que se nos ocurra. Luego en la propia función realizaremos una instancia de un objeto AjaxResponse, que utilizaremos para mostrar resultados en la página.

function si_no($entrada){
   if ($entrada=="true"){
       $salida = "Marcado";
   }else{
       $salida = "No marcado";
   }

   //instanciamos el objeto para generar la respuesta con ajax
   $respuesta = new xajaxResponse();
   //escribimos en la capa con id="respuesta" el texto que aparece en $salida
   $respuesta->addAssign("respuesta","innerHTML",$salida);

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


El objeto xajaxResponse() sirve para realizar acciones en la página sin tener que recargar el documento. Dispone de varios métodos o funciones, como por ejemplo addAssign() que sirve para asignar un valor a una propiedad de un elemento de la página. En este caso se asigna el valor contenido en la variable $salida al innerHTML de la capa "respuesta", con lo que se altera el texto contenido en esa capa.

4) Asociamos la función PHP al objeto xajax

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


Esta asociación permitirá ejecutar la función PHP desde una llamada a una función Javascript.

5) Antes de enviar cualquier contenido a la página, tenemos que ejecutar un método del objeto xajax para procesar las peticiones del que puedan llegar a la página.

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


Insistimos, esta llamada al método se tiene que hacer antes de escribir ningún contenido dentro del código de la página, es decir, antes que llegue al cliente ningún carácter de código HTML.

6) Escribir el código javascript necesario para procesar las llamadas a ajax.

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


Lo ideal es hacer esta llamada al método printJavascript() dentro del <head> de la página.

Si nos fijamos, el método recibe un parámetro, que es la ruta relativa para acceder al directorio donde están los archivos xajax descomprimidos.

7) Podemos hacer llamadas a las funciones PHP en cualquier lugar del código, como respuesta a las acciones del usuario con javascript.

<input type="checkbox" name="si" value="1" onclick="xajax_si_no(document.formulario.si.checked)">
Como podemos ver, desde un elemento de la página, como en este caso una casilla de verificación, al cambiar su estado, se llama a una función javascript para ejecutar la función PHP escrita anteriormente. Es decir, al pulsar el chechbox se desencadena el evento onchange y con él se llama a la función xajax_si_no() enviándo como parámetro el estado (chequeado o no) de la casilla de verificación.

Con esto es todo tenemos todo lo necesario para entender el ejemplo. Podemos verlo en ejecución en una página aparte.

Podemos ver el código del ejemplo completo a continuación, pero tener en cuenta que para que funcione tiene que disponer del código de la clase xajax, que en este caso debe estar en un subdirectorio que cuelgue del directorio donde está el archivo del ejemplo.

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

//instanciamos el objeto de la clase xajax
$xajax = new xajax();

function si_no($entrada){
   if ($entrada=="true"){
       $salida = "Marcado";
   }else{
       $salida = "No marcado";
   }

   //instanciamos el objeto para generar la respuesta con ajax
   $respuesta = new xajaxResponse();
   //escribimos en la capa con id="respuesta" el texto que aparece en $salida
   $respuesta->addAssign("respuesta","innerHTML",$salida);

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

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

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

<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>Si / No en Ajax</title>
   <?
   //En el <head> indicamos al objeto xajax se encargue de generar el javascript necesario
   $xajax->printJavascript("xajax/");
   ?>
</head>

<body>
<div id="respuesta"></div>
<form name="formulario">
<input type="checkbox" name="si" value="1" onclick="xajax_si_no(document.formulario.si.checked)">
</form>

<script type="text/javascript">
   xajax_si_no(document.formulario.si.checked); //Llamando inicialmente a la función xajax_si_no inicializamos el valor de la capa con la respuesta
   </script>
</body>
</html>


Nota: Para ampliar la información de Xajax explorar el manual de Ajax para PHP.

Nota: En estos ejemplos hemos utilizado la versión 0.2.5 de Xajax. Por favor, leer la introducción al manual de Xajax, porque tiene algunos detalles sobre la versión y el trabajo con Xajax que conviene saber, así como el enlace para la descarga de la librería Xajax 0.2.5 para que podáis poner en marcha vosotros mismos estos ejemplos en vuestros servidores.

Referencia: Hemos publicado un artículo sobre cómo actualizar este y otros scripts de este manual a la versión 0.5 de xajax: Actualizar a Xajax 0.5.

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

Osvado

28/4/2007

Estimado ..

Excelente, lo unico que puse en el codigo fue esto

<?php

$xajax->printJavascript("xajax/");
?>

Ya que en el ejemplo viene con sin "php"

De todo lo demas esta muy bien.

Realice las pruebas con el cliente firefox e internet explorer 6 y com servidor wamp5 para windows sobre xp

Saludos y mil gracias.
Osvaldo Ramirez

Carmelo Carrillo

02/5/2007
Más claro imposible. Es fabulosa la manera que tenéis de plasmar las cosas.

Enhorabuena chicos/as.

robman

09/5/2007
ya prove los ejemplos en FF2.0, IE 7 y Opera 9, y funcionan a la perfeccion

Daniel

03/7/2007
Tiene un solo problema, la gracia seria que cambie de estado instantaneamente sin necesidad de hacer click luego en otro lado. No se usa ajax para eso, para cambiar un simple estado con un JS es mas que suficiente.

Mario

11/7/2007
Probé el ejemplo http://www.desarrolloweb.com/articulos/ejemplos/ajax/xajax/checkbox_si_no.php y en Firefox 2 sí funciona pero no así con IE 6, ¿que puede estar pasando?.

Saludos

Carlos alberto

18/7/2007
utilice el codigo para desplegar registros de una base de datos y todo va bien, al dar clic se genera un textbox para editarlo pero se crear arriba y no dentro del div que le pongo, Que puede ser?

Fresa

28/7/2007
La function que llama en esta parte es "$xajax->processRequest(); " y no la aparece en la linea 28 "$xajax->processRequests(); "

Pero el resto excelente.
Gracias

Rulz

01/8/2007
Estoy usando el firefox 2.0.0.6 y no me jala. No me marca ningún mensaje de error y sale el checkbox, pero no despliega texto alguno, mi versión de php es 5.2.1. Espero que alguien me pueda ayudar.

Oscar Beas Enriquez

14/8/2007
A ver señores el script tiene dos que tres detalles que corregir de acuerdo a la libreria

Primero:

Para declarar el incio de código php hay que poner <?php y no <? como lo muestra el ejemplo, corrigiendo esto se interpretará correctamente.

Segundo:

/escribimos en la capa con id="respuesta" el texto que aparece en $salida
$respuesta->addAssign("respuesta","innerHTML",$salida);

en la clase xajaxResponse la funcion no es addAssing sino assing de manera que hay que coregirlo en el ejemplo.

Corrigiendo esos detalles me ha funcionado en IE7 a la perfección.

Sergio

21/8/2007
Ojo que en el código completo aparece la llamada a la función processRequest() como $xajax->processRequests(); con una "s" al final y es erróneo. Si podeis corregirlo mejor. Gracias.

Cynthia

21/8/2007
Muchas Gracias por el tutorial, queria añadir que donde dice $xajax->processRequests(); Tuve que remplazarlo por $xajax->processRequest(); para que funcione (sin s al final). Saludos

pepe

28/8/2007
Hola, voy a agrupar los cambios que habeis dixo todos para que funcione.

- Primero cambiar <? por <?php, por si no tienes activado las sentencias cortas.
-Luego fijarse en la ruta del xajax.inc.php ya que pone require ('xajax/xajax.inc.php'); y yo me he descargado la ultima version y la ruta es require ('xajax/xajax_core/xajax.inc.php');
-En $respuesta->addAssign dejarlo en $respuesta->assign ya que el metodo es assign.

Y bueno, creo que ya no me dejo nada, con estos cambios me ha funcionado en IE 6 y en Firefox 1.5.
Salu2

cesar gonzalez

12/9/2007
Yo de nuevo, ja ja. Con el evento "onchange" el internet explorer 7 mostraba el cambio en la leyenda cuando hacia click en cualquier parte del formulario, menos en la casilla. Probé con "onclick" y funcionó, acá les pego el codigo con el que finalmente el ejemplo funciona en internet explorer 7... Tambien funciona en Mozilla (la ultima version). Usé la version xajax_0.5_beta_4b_Full

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

//instanciamos el objeto de la clase xajax
$xajax = new xajax();

function si_no($entrada){
if ($entrada=="true"){
$salida = "Marcado";
}else{
$salida = "No marcado po";
}

//instanciamos el objeto para generar la respuesta con ajax
$respuesta = new xajaxResponse();
//escribimos en la capa con id="respuesta" el texto que aparece en $salida
$respuesta->assign("respuesta","innerHTML",$salida);

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

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

//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>Si / No en Ajax</title>
<?
//En el <head> indicamos al objeto xajax se encargue de generar el javascript necesario
$xajax->printJavascript("xajax/");
?>
</head>

<body>
<div id="respuesta"></div>
<form name="formulario">
<input type="checkbox" name="si" value="1" onclick="xajax_si_no(document.formulario.si.checked)">
</form>

<script type="text/javascript">
xajax_si_no(document.formulario.si.checked); //Llamando inicialmente a la función xajax_si_no inicializamos el valor de la capa con la respuesta
</script>
</body>
</html>

rey

19/9/2007
hola hasta ahora todo bien he bajado la ultima version del modulo xajax, he copiado el codigo tal como esta y arregle la direccion de:

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

por:

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

ya que en el modulo cuando se descompacta queda el xajax.inc.php dentro de un folder xajax_core, bueno eso no es tam importante, el caso es qu cuando ejecuto el codigo en el server me da este error:

Fatal error: Call to undefined method xajax::processRequests() in D: eysitioxajaxindex.php on line 28

que creen ustedes ?? Help!!!!

gracias de antemano

jorge vadillo

27/9/2007
Es muy util mezclar el ajax con php, pero este codigo no me funciona descargue el archivo xajax_0.5_beta_4b_Full.zip, y creo ke el nombre de las carpetas ya cambio ya no solo es ajax sino ajax_core en
require ('xajax/xajax.inc.php'); ahora seria
require ('xajax_core/xajax.inc.php');

tambien en esta parte
//El objeto xajax tiene que procesar cualquier petición
$xajax->processRequests();

no lleva s al final es
//El objeto xajax tiene que procesar cualquier petición
$xajax->processRequest();

ya con todo eso ya no marca error pero aun asi no me muestra nada en la capa respuesta solo se ve el checkbox.

podrian decirme porke??

gracias

Begoña

15/10/2007
He cambiado al evento onclick y me funciona perfectamente.

Gracias Cesar por tu constancia.
Nunca tiremos la toalla!!.

Juinz

17/10/2007
Hola,
Trate de ocuparlo pero no me dejo, incluso copiando el ejemplo completo al index.php. Tengo en una carpeta el index, y una carpeta xajax con todo dentro. El error que me tira dice "Fatal error: Call to undefined method xajax::processRequests()". He tratado dirigiendolo a todas las carpetas que he encontrado. Los ejemplos funcionan eso si... los que vienen con xajax. Es la ultima version beta por si acaso...

jose rosales

23/10/2007
Ya tambien lo probe con Opera 9.23, excelente ejemplo funciona correctamente, aunque un poco lenta la respuesta como 2 a 3 segundos, tengo procesador Pentium 4, 3gz, 512 Ram y siento que podria ir mas rapido.
Como siempre IE 7, del nabo no supo que hacer y se congelo literalmente, Firefox 2.0 excelente

Jorge Aparicio

13/11/2007
Tengo una implementacion de este ejemplo para votar comentarios en una web. Y el caso es que en firefox no sale el mensaje de voto registrado mientras que en explorer si. A que se puede deber esta incompatibilidad??

Cristian

28/11/2007
Yo probé el ejemplo en fedora 7 y no me funciona, al compilarlo por la consola me sale lo siguiente:

xajax Error: xajax failed to automatically identify your Request URI.Please set the Request URI explicitly when you instantiate the xajax object

alguien me puede decir que es eso??? necesito ayuda porfavor..
Gracias

Adriana Cárdenas

10/12/2007
Hola, después de realizar todos los cambios, éste es el código que me corre en IE7, hay que tener mucho cuidado con las rutas, yo puse el archivo php en la raíz del www del servidor y dentro del www un subdirectorio xajax que contiene todos los subdirectorios y archivos que se descomprimen del .zip que se baja de http://sourceforge.net
Me parace un buen ejercicio para empezar. Muchas gracias a todos por los comentarios

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

//instanciamos el objeto de la clase xajax
$xajax = new xajax();

function si_no($entrada){
if ($entrada=="true"){
$salida = "Marcado";
}else{
$salida = "No marcado";
}

//instanciamos el objeto para generar la respuesta con ajax
$respuesta = new xajaxResponse();
//escribimos en la capa con id="respuesta" el texto que aparece en $salida
$respuesta->assign("respuesta","innerHTML",$salida);

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

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

//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>Si / No en Ajax</title>
<?php
//En el <head> indicamos al objeto xajax se encargue de generar el javascript necesario
$xajax->printJavascript("xajax/");
?>
</head>

<body>
<div id="respuesta"></div>
<form name="formulario">
<input type="checkbox" name="si" value="1" onclick="xajax_si_no(document.formulario.si.checked)">
</form>

<script type="text/javascript">
xajax_si_no(document.formulario.si.checked); //Llamando inicialmente a la función xajax_si_no inicializamos el valor de la capa con la respuesta
</script>
</body>
</html>

Rodrigo Solorzano Pardo

17/12/2007
Probado en FIREFOX 2.0.0.7 y IE 7.0
Mi carpeta XAJAX la tengo en el ROOT de WWW

Ojo el evento onchange hay que cambiarlo por onclick!

$xajax->processRequests(); hay que cambiarlo por $xajax->processRequest(); quitando la ultima s


$respuesta->addAssign("respuesta","innerHTML",$salida); hay que cambiarlo por
$respuesta->assign("respuesta","innerHTML",$salida);

Finalmente
$xajax->printJavascript("../xajax/");

se debe tener en cuenta la localizacion del directorio principal de XAJAX



<?php


require_once("../xajax/xajax_core/xajax.inc.php");
-
//instanciamos el objeto de la clase xajax
$xajax = new xajax();

function si_no($entrada){
if ($entrada=="true"){
$salida = "Marcado";
}else{
$salida = "No marcado";
}

//instanciamos el objeto para generar la respuesta con ajax
$respuesta = new xajaxResponse();
//escribimos en la capa con id="respuesta" el texto que aparece en $salida
//$respuesta->addAssign(\"respuesta\",\"innerHTML\",$salida);
$respuesta->assign("respuesta","innerHTML",$salida);

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


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

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


//$sLocalFolder = dirname(__FILE__);
//echo $sLocalFolder;


?>


<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>Si / No en Ajax</title>
<?php
//En el <head> indicamos al objeto xajax se encargue de generar el javascript necesario
$xajax->printJavascript("../xajax/");
?>
</head>

<body>
<div id="respuesta"></div>
<form name="formulario">
<input type="checkbox" name="si" value="1" onchange="xajax_si_no(document.formulario.si.checked)">
</form>

<script type="text/javascript">
xajax_si_no(document.formulario.si.checked); //Llamando inicialmente a la función xajax_si_no inicializamos el valor de la capa con la respuesta
</script>
</body>
</html>

Carlos

20/12/2007
Hola,
Implemento tal cual el código pero no funciona (tengo que incluir alguna archivo .php o .js más), me da el siguiente error:

<br />

<b>Fatal error</b>: Call to undefined method xajaxResponse::addAssign() in <b>C:ServidorWEBappwebroot

probaXajax.php</b> on line <b>19</b><br />

Que estoy haciendo mal???
Gracias.

wilson

30/12/2007
Son muy buenos sus ejemplos de xajax, solo que no funcionan con la ultima version, por favor corrijanlos, muchas gracias.

Felipe

21/1/2008
El llamado $xajax->processRequests(); no me sirve, creo que es $xajax->processRequest();

Lo probé pero con otro servidor "Abbys" en vez de Apache y no funcionó aunque no me generó error.

No entiendo bien si en realidad el servidor puede afectar el resultado final.

Miguel Angel

23/1/2008
Efectivamente, el evento onchange habría que cambiarlo por onclick para que funcione en Iexplorer. Luego el problema del ejemplo no es del framework xajax, sino de mi programación en Javascript, y que no lo había probado en Iexplorer. Perdonar las molestias.

Lo he actualizado en el artículo y el ejemplo.

Gracias

Miguel Angel

23/1/2008
Sobre el tema del $xajax->processRequests();

Será la versión del xajax o cualquier otra cosa, porque en mis ejemplos si le quito la "s" final, me da un error de función no definida.

Eso os lo aseguro, aunque simplemente probar vosotros con lo que os funcione.

curenay

17/3/2008


Sobre el tema de ERROR de $xajax->processRequests();

Esto es debido a que este código es para la versión 2.0 y no para la versión 5.0 deben quitarle la "s" a la función debe quedar así.

$xajax->processRequest();

esta es la url de Upgrade de 2.0 a 5.0 para las funciones que tengan problemas.

http://xajaxproject.org/wiki/Upgrading_from_xajax_0.2_to_xajax_0.5


Suerte.

Alejandro

15/10/2008
Muchas gracias Miguel Angel, excelente ejemplo para comprender el accionar del framework. Leyendo todo el hilo de respuestas están las soluciones para la última version, las cuales he aplicado y está corriendo todo a la perfección.

Freddy

25/11/2008
Estoy trabajando Xajax y tengo una duda, cuando estoy trabajando bases de datos si no incluyo el archivo de las conexiones en cada funcion que realizo me sale un error, como puedo inlcluir una sola vez el archivo y que funcionen todas las funciones que lo necesitan?

Oliver

27/12/2008
Alguien sabe como obtener un URL (no una una funcion) con ajax esto es: llamar a una url, de echo el url seria dentro del mismo dominio.

Rudy Lopez Echeverria

28/1/2009
Hola. gracias por sus comentarios.
Alqguien podria ayudarme o darme una pauta.

Yo uso la herramienta "adodb" para conectarme a la base de datos y cuando quiero unirlos me sale el siguiente error.

" Output has already been sent to the browser at C:AppServwwwajaxase.php:7. Please make sure the command $xajax->processRequest() is placed before this."

quiere decir que la informacion ya se envio al explorador, como podria solucionar esto. POR FAVOR UNA AYUDA

juan

04/2/2009
POr fa tienen algun de ejemplo de programacion con cms aplicando ajax desearia saber si alguien es tan amable de enviarme un codigo para poder realizar un deber de la u de ante mano le agradezco

Adriana

05/3/2009
Oigan pues soy nueva en esto y trate de hacer este ejemplo pero me marca un error de ke no encuentra la ruta xajax/xajax.ini.php

tengo una carpeta llamada XAJAX donde guarde todos los archivos que venian en el .rar y en otra carpeta que se llama xajax1 tengo este ejercicio y el la ruta le puse
../XAJAX/xajax.ini.php y no kiere funcionar

ai porfa si alguien me explica yo muuuy agradecida

Robinson

16/4/2009
Evaluacion
Excelente el articulo, es basico e ilustra muy bien el tema, sin complicaciones....el ejemplo es bueno...para nosotros los principiantes en estos temas de la programacion Web.

Rodger

30/6/2009
Deshabilitar inputs con xajax
Buenas Tardes,
tengo un formulario con vario inputs, al momento de guardar los datos en una base quiero deshabilitar los campos. como se hace con xajax.

gracias

emiliete1990

08/7/2009
insercion archivo
Hola. El ejemplo esta muy bien, pero me gustaria saber como introducir la salida de un archivo .html en el div.
Gracias.

Dragon_cu

08/9/2009
nuevo error
hola a todos, quiero presentarles un error qque al parecer no le ha dado a nadie:
Fatal error: Call to a member function printJavascript() on a non-object in C:wampwwwPruebaXAJAXPaginaVista.php on line 6
porque podria pasar esto??

Chema

26/9/2009
Para que aparezca el Boton de enviar si se acepta el radio
<?php
//incluímos la clase ajax
require ('xajax_core/xajax.inc.php');

//instanciamos el objeto de la clase xajax
$xajax = new xajax();

function si_no($entrada){
if ($entrada=="true"){
$salida = '<input type="button" name="enviar" value="Enviar" >';
}else{
$salida = "Acepta las condiciones para poder Enviar";
}

//instanciamos el objeto para generar la respuesta con ajax
$respuesta = new xajaxResponse();
//escribimos en la capa con id="respuesta" el texto que aparece en $salida
$respuesta->assign("respuesta","innerHTML",$salida);

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

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

//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>Si / No en Ajax</title>
<?
//En el <head> indicamos al objeto xajax se encargue de generar el javascript necesario
$xajax->printJavascript("");
?>
</head>

<body>

<form name="formulario">
<input type="checkbox" name="si" value="1" onclick="xajax_si_no(document.formulario.si.checked)">
<div id="respuesta"></div>
</form>

<script>
xajax_si_no(document.formulario.si.checked); //Llamando inicialmente a la función xajax_si_no inicializamos el valor de la capa con la respuesta
</script>
</body>
</html>

Odlanier

15/10/2009
Muchas gracias
yo utilizo opera 9.6 y funcionó OK con los arreglos que citaron. Muchas gracias.

marato

20/10/2009
comentario sobre error en xajax->processRequest()
Hago el comentario. espero puedan resolverlo. Estoy empezando a incursionar en el tema AJAX... hice varias paginas de prueba sin conexion a bases de datos aun... y cada vez que queria cargar una pagina me salia el error "Output has already been sent to the browser. Please make sure the command $xajax -> processRequest() is placed before this."
Y estuve buscando en otros foros. y una persona comento que habia que quitar los espacios en blanco delante de la etiqueta <?php donde empezamos a definir nuestro objeto AJAX.... y logre solucionar mi inconveniente....
Espero pueda servir de ayuda este comentario.

Marato.

Damian

29/10/2009
Para marato
Lo pudiste solucionar a ese error? porque yo hice lo de quitar las espacios en blancos porque tambien habia visto eso que comentas en otro foro pero no pasa nada y el error me lo sigue poniendo:
Output has already been sent to the browser at C:xampplitehtdocsAJAXejemploajax2.php:1. Please make sure the command $xajax->processRequest() is placed before this.

Ya lo probe en IE 8 y en Chrome, pero es lo mismo el error sigue estando y el codigo que probe es el que saque de aca:
<?php
require("xajax/xajax_core/xajax.inc.php");
$xajax= new xajax();
function si_no($entrada)
{
if ($entrada=="true")
{
$salida="Marcado";
}
else
{
$salida="No marcado";
}
$respuesta = new xajaxResponse();
$respuesta->Assign("respuesta","innerHTML",$salida);
return $respuesta;
}
$xajax->register(XAJAX_FUNCTION,'si_no');
$xajax->processRequest();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Si / No en Ajax</title>
<?php
$xajax->printJavascript("xajax/");
?>
</head>

<body>
<div id="respuesta"></div>
<form name="formulario">
<input type="checkbox" name="si" value="1" onclick="xajax_si_no(document.formulario.si.checked)" />
</form>

<script type="text/javascript">
xajax_si_no(document.formulario.si.checked);
</script>
</body>
</html>

Ojala alguien me pueda ayudar. Gracias
Damian
http://www.glosarioit.com/

Stalin

22/1/2010
Cambios
Estuve probando este tutorial y en la nueva version se vieron varios cambios

ya no es $xajax->processRequests(); ahora es $xajax->processRequest(); ("sin la ultima s")

el require ('xajax/xajax.inc.php'); apunta ahora para ('xajax/xajax_core/xajax.inc.php');

tambien el addAssign es ahora solo "assign" (sin las comillas obviamente) y el $xajax->registerFunction(...); ahora es $xajax->register(XAJAX_FUNCTION, ...);

para mas informacion seria bueno que le checken un hojeada a la documentacion

http://xajaxproject.org/en/docs-tutorials/upgrading-from-xajax-0-2-x-to-0-5/

Ramon David

08/2/2010
Urgente... Colaboramen
hola amigos

el código me funcionó bien en todos los navegadores con MYSQL pero el problema es cuando lo pase a ORACLE pues no se envia el formulario.


¿Alguien me puede decir que estoy haciendo mal?
este es el código


<?php
//incluímos la clase ajax
require ('xajax/xajax_core/xajax.inc.php');
//instanciamos el objeto de la clase xajax
$xajax = new xajax();
include ('conexion.php');/*utilizo la libreria adobd*/
$conn = Conectar();
function procesar_formulario($form_entrada){

$sql =("INSERT INTO SISTEMADOCUMENTAL.USUARIOS(PRIMER_APELLIDO) VALUES ('". $form_entrada["primer_apellido"] ."')");

if ($conn->Execute($sql)==true){
$salida = "Insertado correctamente";
}else{
$salida = "No se ha insertado. Este es el error: " .$conn-> ErrorMsg();
}
//instanciamos el objeto para generar la respuesta con ajax
$respuesta = new xajaxResponse();
//escribimos en la capa con id="respuesta" el texto que aparece en $salida
$respuesta->assign("mensaje","innerHTML",$salida);
//tenemos que devolver la instanciación del objeto xajaxResponse
return $respuesta;
}
//registramos la función creada anteriormente al objeto xajax
$xajax->registerFunction("procesar_formulario");

//El objeto xajax tiene que procesar cualquier petición
$xajax->processRequest();
?>
<html>
<head>
<title>Enviar y procesar un formulario con Ajax y PHP</title>
<?
//En el <head> indicamos al objeto xajax se encargue de generar el javascript necesario
$xajax->printJavascript("xajax/");
?>
</head>

<body>
<h1>nuevo usaurio </h1>
<div id="mensaje">
<form id="formulario">

cod ido:
<input type="text" name="codigo">
<br>
Nombre :
<input type="text" name="primer_apellido">
<br>
<input type="button" value="Enviar" onclick="xajax_procesar_formulario(xajax.getFormValues('formulario'))">
</form>
</div>

</body>
</html>

nilo

19/2/2010
solucion
bueno seguramente el codigo php ( no la del formulario ), la estas colocando en cualquier parte ... lo q tienes q hacer es colocarla en la parte superior de tu codigo .. por encima de la etiqueta html, y listo

Web Nightingale

17/3/2010
El lugar y el momento adecuado.
Muchisimas gracias, realmente me ha sido util.
Estaba atorado a la mitad de un monstruo proyecto que requeria interactividad con PHP, y estaba realizando codigo innecesario...
ahora con esto la labor se reducira mucho!!!
Gracias mil!

vasquezader

24/5/2010
tengo un error a la hora de la conexion
Aca mi archivo php.
<?php
//archivo ajax04.php
require('xajax_core/xajax.inc.php');
require('conexion.php');
$xajax=new xajax();
$xajax->configure('debug',true);
$xajax->configure('javascript URI','./');
function procesar_formulario($form_entrada)
{
$sql=("insert into persona (nombre,apellido,pass,direccion,telefono,email,sexo) values ('$form_entrada[nombre]','$form_entrada[apellido]' '$form_entrada[pass]','$form_entrada[direccion]','$form_entrada[telefono]','$form_entrada[email]','$form_entrada[sexo]')");
$cnx->query($sql) or die ($sql);
if (query($sql)){
$salida= "Guardo correctamente";
}else{
$salida = "No se ha insertado. Este es el error: ";
}
$obj=new xajaxResponse();
//assign > coge el valor $saludo y lo asigna a una propiedad de un objeto.
$obj->assign("mensaje","innerHTML",$salida);
return $obj;
}
$xajax->registerFunction("procesar_formulario");
$xajax->processRequest();
echo '<?xml version="1.0" encoding="UTF"-8?>';
?>
<html>
<head><?php $xajax->printJavascript();?>
<script>
function ver()
{
xajax_procesar_formulario(xajax.getFormValues("formulario"));
}
</script>
</head>
<body>
<h1>Recibir y procesar formulario con Ajax y PHP</h1>
<div id="mensaje">
<form id="formulario">
<p>nombre:
<input type="text" name="nombre">
</p>
<p>apellido:
<input type="text" name="apellido">
</p>
<p>pass:
<input type="text" name="pass">
</p>
<p>
direccion:
<input type="text" name="direccion">
</p>
<p>telefono:
<input type="text" name="telefono">
</p>
<p>email:
<input type="text" name="email">
</p>
<p>

sexo:
<input type="text" name="sexo">
</p>
<p>

<input type="button" value="Guardar" onClick="ver()">

</p>
</form>
</div>
</body>
</html>

Y ESTE ES EL MENSAJE DEL :$xajax->configure('debug',true);

xajax debug output
Sun May 23 22:23:21 EST 2010
DONE [1102ms]Sun May 23 22:23:21 EST 2010
ERROR: No response processor is available to process the response from the server.Content-Type: text/html.Check for error messages from the server.Sun May 23 22:23:21 EST 2010
RECEIVED [status: 200, size: 144 bytes, time: 1052ms]:<br /><b>Fatal error</b>: Call to a member function query() on a non-object in <b>C:wampwwwxajax egistrar.php</b> on line <b>11</b><br />Sun May 23 22:23:20 EST 2010
SENT [505 bytes]Sun May 23 22:23:20 EST 2010
SENDING REQUESTSun May 23 22:23:20 EST 2010
CALLING: xjxfun: procesar_formularioURI: http://localhost/xajax/registrar.phpSun May 23 22:23:19 EST 2010
POST: xjxfun=procesar_formulario&xjxr=1274671399902&xjxargs[]=<xjxobj><e><k>nombre</k><v>Sdv</v></e><e><k>apellido</k><v>Sdv</v></e><e><k>pass</k><v>Sdv</v></e><e><k>direccion</k><v>Sdv</v></e><e><k>telefono</k><v>Sdv</v></e><e><k>email</k><v>Sdv</v></e><e><k>sexo</k><v>Sdv</v></e></xjxobj>Sun May 23 22:23:19 EST 2010
PREPARING REQUESTSun May 23 22:23:19 EST 2010
OBJECT TO XML: size = 7Sun May 23 22:23:19 EST 2010
OBJECT TO XML: maxDepth = 20, maxSize = 2000Sun May 23 22:23:19 EST 2010
PROCESSING PARAMETERS [1]Sun May 23 22:23:19 EST 2010
INITIALIZING REQUESTSun May 23 22:23:19 EST 2010
STARTING XAJAX REQUEST

GRACIAS POR SUS RESPUESTAS ES MUY IMPORTANTE ESTO... GRAX

rafoide

08/10/2010
Fantástico manual
Lo primero que hice cuando me registré en Desarrolloweb fue bajarme este manual de XAJAX. Después me he bajado otros más, pero el que más leo y releo es el de XAJAX.
Soy un programador amateur, pero sé que con esfuerzo y un poco de ingenio, las cosas pueden salir adelante.

El manual es fantástico, está muy bien explicado, y creo que no hay nada que reprochar a los autores, porque este manual es el reflejo del esfuerzo. Tened en cuenta que nos regalan este manual, y no podemos exigirles nada.

Por lo tanto, si existe algún error de escritura, lo reportamos (de hecho, el autor ha corregido alguna cosilla), pero si existen errores de otro tipo, no se les puede exigir nada.
Os exhorto a que busquemos en Google, en la página del proyecto XAJAX o donde nos dé la gana, pero no pidamos ayuda en MAYUSCULAS como si fuéramos HOYGAN o unos pobres lusers. Estoy seguro de que somos más inteligentes que eso.

Mencionar, por último, que en varias ocasiones, el autor remarca que está utilizando la versión 0.2, y no la 0.5, que seguro que es la que estáis utilizando: la mayoría de los errores se justifica por no usar la versión del manual. Podéis bajar la 0,5 (yo lo he hecho), pero no pretendáis que el ejemplo funcione, a no se que lo arregléis vosotros mismos. Pero por favor, no pidáis ayuda, esto no es un foro.

Sólo deseo felicitar a los autores de estos fantásticos manuales. Espero que hagáis muchos más. Por mi parte, os reconozco el gran esfuerzo que estáis realizando.

Juan Rojas

25/11/2010
Duda
Amigos Excelente Aporte pero tengo una gran duda...! que nombre le pongo a los archivos php para que estos se conecten??? soy nuevo en programacion y en tecnologia ajax...! saludos espero puedan ayudarme

Gustavo Zepeda

14/7/2011
Xajax+php orientado a objetos
Que tal buenas noche eh estado tratando de utlizar xajax en un proyecto que uso...el problema es que trato de implementarlo para poder ejecutar una funcion de una clase el rpblema esq cuando pingo la funcion $xajax->processRequest() en el constructor marca este error Output has already been sent to the browser at C:AppServwwwlibraryformsclasificationMainClass.form.php:7. Please make sure the command $xajax->processRequest() is placed before this. y si lo coloco justo despues de el retunr del objeto de respuesta no hace nada alguien tiene alguna idea de que hago mal?? este esl el codigo

class MainClassHandler extends MainClass
{
private $table="clases";
private $filter;
private $objResponse;
public $xajax;
//constructor--------------------------------------------------------------------------
public function __construct()
{
$this->xajax = new xajax();
$this->xajax->register(XAJAX_FUNCTION,"saveMainClass");
$this->objResponse = new xajaxResponse();
parent::__construct();
}
//--------------------------------------------------------------------------
public function saveMainClass()
{
$this->xajax->processRequest();
$sentence="";
$sentence=Sentences::getInsertSentence($form,"clases");
parent::save(FilterSqlSentences::getCharFilter($sentence));
$this->objResponse->alert("guardado..");
return $this->objResponse;
}

Luis

22/7/2011
Gracias
Exelente, mas simple no se peude.
Gracias, habia buscado esto por todo lado y solo encontraba enrredos y gente que no sabe explicar.

H.Alberto

22/3/2012
erros con la version XAJAX 0.5
me marca estos errores


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

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

y tambien

Notice: Undefined variable: xajax in C:wampwwwxajax-pruebaindex.php on line 9

Fatal error: Call to a member function printJavascript() on a non-object in C:wampwwwxajax-pruebaindex.php on line 9

si me pudieran ayudar, soy novato y no por mas que busco no encuentro gracias

arkass

14/4/2012
Ejemplo Funcional XAJAX 5.0 y PHP 5.3.8
Cambios en el codigo;

//incluímos la clase ajax
@require_once ('xajax/xajax_core/xajax.inc.php');

Agregamos @ antes del requiere para evitar la salida de errores tales como:

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

Esta linea la Cambiamos:

$xajax->registerFunction("si_no");
por
$xajax->register(XAJAX_FUNCTION,"si_no");

Recordar
tambien en esta parte

$xajax->processRequests();
cambiar por este sin la s al final
$xajax->processRequest();
y
$respuesta->addAssign("respuesta","innerHTML",$salida);
hay que cambiarlo por
$respuesta->assign("respuesta","innerHTML",$salida);

Y no menos importante en el head no olvidar la barra al final ("xajax/"); para la carga correcta de javascript.

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

<?php

//incluímos la clase ajax
@require_once ('xajax/xajax_core/xajax.inc.php');

//instanciamos el objeto de la clase xajax
$xajax = new xajax();
function si_no($entrada){
if ($entrada=="true"){
$salida = "Marcado";
}else{
$salida = "No marcado";
}

//instanciamos el objeto para generar la respuesta con ajax
$respuesta = new xajaxResponse();

//escribimos en la capa con id="respuesta" el texto que aparece en $salida
$respuesta->assign("respuesta","innerHTML",$salida);

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

//asociamos la función creada anteriormente al objeto xajax
$xajax->register(XAJAX_FUNCTION,"si_no");

//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>Si / No en Ajax</title>
<?php
//En el <head> indicamos al objeto xajax se encargue de generar el javascript necesario
$xajax->printJavascript("xajax/");
?>
</head>
<body>
<div id="respuesta"></div>
<form name="formulario">
<input type="checkbox" name="si" value="1" onclick="xajax_si_no(document.formulario.si.checked)">
</form>
<script type="text/javascript">
xajax_si_no(document.formulario.si.checked); /*Llamando inicialmente a la función xajax_si_no inicializamos el
valor de la capa con la respuesta*/
</script>
</body>
</html>

MaKTuB

26/11/2013
No sé por qué no funciona
Hola amigos, buenas:
En primer lugar comentar que me parece buenísimo el manual para aquellos que estamos comenzando con Ajax pero que no tenemos demasiados conocimientos de javascript.
En segundo lugar, preguntaros. He descargado la primera versión estable de XAjax siguiendo los pasos mostrados en el artículo. He escrito el ejemplo, tal y como lo describen pero a la hora de ejecutarlo en mi localhost, sólo me muestra el check en estado desactivado y sin ningún texto en el div respuesta. Cuando clico el check para cambiar su estado, tampoco cambia el valor del div respuesta.

He probado el enlace de ver la ejecucion del ejemplo que poneis en el propio artículo y funciona perfectamente (trabajo con Chrome) por lo que deduzco que el problema no está en el navegador y podría faltarme por implementar algo que sea lo que sea no consigo localizar, pero el caso es que el ejemplo en mi localhost no funciona como debería

¿Alguna idea de qué puede estar ocurriendo? Gracias a todos por vuestra colaboración

kaptain

09/4/2014
AYUDA
e intentado hacer un ejemplo a mi manera y me sale este error : Output has already been sent to the browser at C:xampphtdocsexampleindex.php:2. Please make sure the command $xajax->processRequest() is placed before this. ayuda

Estiben

17/9/2014
Error
"Strict Standards: Only variables should be assigned by reference in C:xampphtdocsxajaxxajax_corexajaxPluginManager.inc.php on line 286"
Me ha salido un error al ejectura una simple funcion, no tengo idea de cual sea el error que estoy cometiendo.
Si me pueden ayudar les estare muy agradecido.

ciryusblack

02/9/2015
error en xajax posible solucion
me sucedio igual con este error y lo solucione modificando el valor de la linea "output_buffering = 4096" en el php.ini , le adicione un cero mas aumentando su valor, quedando "output_buffering = 40960"