Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

xajax y ejecutar funciones encadenadas

Estas en el tema de xajax y ejecutar funciones encadenadas en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola amig@s!! Mi aplicación iba viento en popa hasta que decidí modular un poco las funciones y no hacerlas tan largas y pesadas. Yo sé, ...
  #1 (permalink)  
Antiguo 14/02/2012, 06:56
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
xajax y ejecutar funciones encadenadas

Hola amig@s!!
Mi aplicación iba viento en popa hasta que decidí modular un poco las funciones y no hacerlas tan largas y pesadas.
Yo sé, y ese es un defecto de ajax, que si tú le dices a un botón que ejecute varias funciones no va a hacerlo en orden. Puede ser que se ejecute la segunda función antes que la primera y la tercera antes de la segunda o incluso de la primera.

Pongamos un ejemplo. Yo tengo un botón siguiente que, al pulsarlo, debe hacer que un input hidden cambie de valor(con javascript), que valide el formulario y, dependiendo de si es válido o no, cambie el valor de un input hidden, que se guarden los datos del formulario(con xajax) y que muestre el nuevo formulario con todo lo anterior realizado(con xajax también).
Código PHP:
"<img src='images/next.png' class='botonimg' title='Continuar' onclick='javascript:cambiaOk(0); javascript:validaFormPers(); xajax_insertaDatos(xajax.getFormValues(formulario)); xajax_muestraSiguienteForm(xajax.getFormValues(formulario)); '/> 
La cosa está, como he dicho antes, en que me ejecuta dichas funciones sin ton ni son. A mi me gustaría que no ejecutase una hasta haber terminado la anterior.
Hay alguna forma de conseguirlo?
Mil gracias!!
  #2 (permalink)  
Antiguo 14/02/2012, 07:50
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: xajax y ejecutar funciones encadenadas

tu problema es que aplicas mal la técnica AJAX incluso con el fw Xajax, hacer mal uso de dicha técnica es enviar 2 o más peticiones AJAX/HTTP cuando puedes hacerlo en una sola siempre y cuando ambos controladores esperen la misma data.

Si mal no recuerdo, puedes desde Xajax invocar otra función de Xajax desde PHP y obtener el Response, dónde lo puedes combinar con el response actual del controlador y con ello controlar la precedencia de operaciones y con una sola petición HTTP
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 14/02/2012, 08:01
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: xajax y ejecutar funciones encadenadas

Gracias por tu respuesta maycolalvarez.

Sí, se supone que desde una función en php llamada por ajax se puede ejecutar otra de las mismas características con la función $respuesta->script("funcion(...)");. Eso es a lo que te refieres? Lo malo de esta técnica es que a veces funciona y a veces no. Normalmente no...

O es otra cosa a la que te refieres? Me lo podrías explicar un poco mejor?

Un saludo!!
  #4 (permalink)  
Antiguo 14/02/2012, 08:55
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: xajax y ejecutar funciones encadenadas

no, esa función lo que hace es reinvocar un script al ser recibido por el core js de xajax en el cliente, lo que provoca otra petición HTTP/AJAX

me refiero a una función del Objeto XajaxResponse que te permite combinarlo con otra instancia de XajaxResponse desde PHP, no recuerdo cual era su nombre, pero analogamente es así:

//dentro del controller:
$objResponse = new XajaxResponse();

$response2 = otra_funcion_xajax_php(); //obtenemos el respose de otro controlador

$objResponse->funcion_de_mescla($response2); //NO recuerdo el nombre de funcion_de_mescla, hace 3 años que no uso xajax
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 14/02/2012, 10:46
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: xajax y ejecutar funciones encadenadas

Hola!!
Creo entender que me dices que en una sola función invoque a todas las demás.
Algo así como
Código PHP:
<img src='images/boton.png' id='soy_un_boton' onclick='xajax_procesa_boton(xajax.getFormValues(formulario))' /> 
Luego, en la función a la que llamo con el botón
Código PHP:
function procesa_boton($elements)
{
   
$respuesta = new xajaxReponse();

   
$respuesta2 javascript:valida_el_formulario();
   
$respuesta3 xajax_inserta_los_datos($elements);
   
$respuesta4 xajax_imprime_lo_obtenido_en_la_respuesta3($respuesta3);
   
$respuesta5 xajax_pasa_al_siguiente_formulario($elements);
   .
   .
   .
   return 
$respuesta;

Puff, espero haberte entendido mal.

Mientras tanto, y parece no dar problemas(hasta que los dé pues es un martillazo en el código) he creado la función espera() en la cual pongo un sleep(1) y la llamo entre funciones en el botón. Quiero decir, primero llamo a todas las de javascript, luego a la de espera, después a la inserción, otra vez a espera y por último a la de que pase al siguiente formulario.
No sé el tiempo que aguantará el código así, espero que por lo menos hasta que encuentre otra solución mejor.

Gracias de nuevo!!
  #6 (permalink)  
Antiguo 14/02/2012, 14:24
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: xajax y ejecutar funciones encadenadas

te recuerdo que js es del lado del cliente, este tipo de instrucción no es válida:

$respuesta2 = javascript:valida_el_formulario();

la función que te indique se llama loadCommands, y la puedes ver en la documentación: http://xajaxproject.org/en/docs-tuto.../loadcommands/

al usar esta función puedes evitar el exceso de peticiones en el cliente, siempre y cuando ambos controladores esperen la misma data
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #7 (permalink)  
Antiguo 15/02/2012, 01:51
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: xajax y ejecutar funciones encadenadas

Gracias de nuevo maycolalvarez.
La funcion loadCommands va bien y se me ejecuta la siguiente función xajax llamándola desde dentro de otra función xajax.
Ahora está el cómo hacer que primero se ejecuten las funciones javascript y luego las xajax...
Al no usar botones, sino imágenes, no puedo poner un onsubmit. Tengo un hidden que cambia de valor si el form está correcto por medio de javascript. Por tanto llamo a las funciones en javascript antes de llamar a las xajax.
Quién me asegura que se ejecutan éstas primero y las otras después?
Gracias!!

Etiquetas: funciones, xajax
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:59.