elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  Ajax request no se me ejecuta en el orden correcto.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ajax request no se me ejecuta en el orden correcto.  (Leído 3,522 veces)
CryNoF

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Ajax request no se me ejecuta en el orden correcto.
« en: 10 Noviembre 2017, 20:41 pm »

Hola!

Estoy programando en EXTJS y estoy teniendo un problema con un Ajax Request. Sucede que el orden de su ejecucion no permite validar algunas cosas posteriormente.

Ejemplo:

Llamo los parametros al archivo guardar_avance.php (deje el IF vacio para no alargar el codigo).








El problema es que se ejecuta el Ajax Request, y al momento de llegar al success no entra en el, sino que salta al codigo de abajo , o sea al IF, y luego vuelve al inicio del Ajax Request, y al final de todo vuelve al success y si ingresa a él.

Esto me produce problemas cuando necesito ejecutar codigo despues del ajax, (por ejemplo el IF), que me comprueba q sucedio con la variable guardarRemuneracionOk , pero al saltarse el success en la primera ejecucion, este IF se invalida y no me sirve (ya que al saltarse el succes me deja en false la variable guardarRemuneracionOk ), entonces cuando ejecuta el IF la pilla falsa, y cuando si entra al success y la deja en true, ya no vuelve a comprobar con el IF.


En otras palabras, lo que esta dentro del sucess se ejecuta al final de todo, incluso despues de el if que comprueba lo dentro del success, por ende, la comprobacion del IF, queda invalidada.

Como puedo arreglar ese orden para q el success entre antes del IF?

muchas gracias!!


En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.850



Ver Perfil WWW
Re: Ajax request no se me ejecuta en el orden correcto.
« Respuesta #1 en: 12 Noviembre 2017, 15:21 pm »

Es un problema de lógica, no de código. AJAX es  Asynchronous javascript And XML o lo que es en español: javascript asíncrono y XML. La palabra clave es asíncrono. Quiere decir que se ejecuta a dispar con los demás eventos.

En tu caso, el IF y en general todo lo que tengas que hacer con lo que devuelva el request (success), lo tendrás que hacer dentro de la propia función success o en su defecto y lo aconsejable, dentro de un callback.


Código
  1. success: function(resp, request)
  2. {
  3.    var respuestaRenumeracion = txt.util.JSON.decode(resp.responseText);
  4.    comprobarParametros(respuestaRenumeracion);
  5. }
  6.  
  7. // ......
  8.  
  9. function comprobarParametros(resp){
  10. //      if()....
  11. }

Saludos


En línea

CryNoF

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Re: Ajax request no se me ejecuta en el orden correcto.
« Respuesta #2 en: 13 Noviembre 2017, 13:35 pm »

Gracias drvy!, el problema es que no es solo el unico ajax request que tengo.

En el codigo real yo tengo 3 Ajax request correlativos, y cada vez que entra a al success de cada ajax, asigna una variable como true. Una vez que se ejecutan los 3 Ajax, debieran haber 3 variables con valor true, que estas variables son comprobadas en el if de este modo.



Entonces si hay algun ajax que no entro al success dara falso e identificara cual es dando el mensaje, pero el problema es que se ejecutan los Ajax pero no los success, por ende no se convierten las variables en true, y quedan en false, de ahi se ejecuta el if mandandome los mensajes de error, y despues de eso se ejecutan los success asignando trues, pero ya no me sirve por que no vuelve a pasar por el IF.





Este es el orden en que se ejecutan las acciones segun los console.log que puse en cada success y cada IF


antes de entrar

ENTRO A MENSAJE DE ERROR PERSONAL
ENTRO A MENSAJE DE ERROR DEPENDENCIA
ENTRO A MENSAJE DE ERROR REMUNERACION

ENTRO A SUCCESS PERSONAL
ENTRO A SUCCESS REMUNERACIONES
ENTRO A SUCCESS DEPENDENCIA

Que mas podria hacer??

Muchas gracias!
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Ajax request no se me ejecuta en el orden correcto.
« Respuesta #3 en: 13 Noviembre 2017, 16:17 pm »

estás completamente desvariando sobre el concepto... ya #!drvy te dijo... Asincrono, es decir, no se hace en sincronía

Citar
La voz sincronía (del griego syn, "con", "juntamente", "a la vez"; y Χρόνος; véase Chronos o Khronos o Cronos, "tiempo"; en latín, Chronus) alude a una coincidencia en el tiempo o a la simultaneidad de hechos o fenómenos.

si necesitas que se haga algo al completar los 3, debes hacer un concentrador o debes hacerlas encadenadas

concentrador

Código:
global data1, data2, data
3

peticion1.succes(concentrador(1, data))
peticion2.succes(concentrador(2, data))
peticion3.succes(concentrador(3, data))

concentrador(n, data){
  if n es 1 -> data1 = data
  if n es 2 -> data2 = data
  if n es 3 -> data3 = data

  if no_vacio(data1) y no_vacio(data2) y no_vacio(data3){
    realizar_evento_sincrono()
  }
}

encadenada

Código:
peticion1.succes(funcion(){ 
  peticion2.succes(funcion(){
    peticion3.succes(funcion(){
      realizar_evento_sincrono()
    })
  })
})

En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
CryNoF

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Re: Ajax request no se me ejecuta en el orden correcto.
« Respuesta #4 en: 13 Noviembre 2017, 20:20 pm »

Muchas gracias por sus recomendaciones, pero viendo el ejemplo no se me ocurre como podria aplicarlo a mi codigo.

Como podria hacerlo, o bien, a que corresponde cada parte?, como por ejemplo, la data, o el concentrador?

Algun ejemplo de como ordenar mi codigo en dicha estructura?

Les agradezco :D

Un abrazo!
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Ajax request no se me ejecuta en el orden correcto.
« Respuesta #5 en: 13 Noviembre 2017, 23:25 pm »

En general al hablar de ajax hablas de cosas asíncronas y raramente se usas esas técnicas, deberías plantearte que tu código haga una llamada en lugar de 3 separadas dependientes de orden
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
CryNoF

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Re: Ajax request no se me ejecuta en el orden correcto.
« Respuesta #6 en: 14 Noviembre 2017, 15:38 pm »

Gracias engel lex, lo habia pensado asi en un principio, lo que sucede es que es un formulario que contiene 3 pestañas, cada una es una sección diferente, por lo que por la gran cantidad de campos y grillas se me hacia tedioso y confuso crear una sola consulta que me trajera todos los datos de todas las pestañas al ser consultada en un PHP, por lo que lo dividi en 3 json, cada uno con una consulta que trae los datos correspondientes a cada pestaña. Por dicho motivo tengo 3 ajax request, y mi idea era verificar cuando era el momento en que habia un error al guardarse una pestaña especifica e identificarla, pero como es asincronico, no puedo establecer un orden ni saber que peticion terminara ultimo para luego asi comprobar cual fallo despues de todo el proceso.

Pense en un momento poner la comprobacion dentro del success de la ultima pestaña, pero hay veces que si termina ultimo, y otras veces ese success se ejecuta de los primeros, y ahi tengo el drama.

Vere como puedo solucionar el tema, puesto que rediseñar el codigo se me haria muy tedioso.

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
LOGIN EN PHP AJAX Y MYSQL NO ME EJECUTA EL INDEX.PHP (SOLUCIONADO) « 1 2 »
PHP
smagno 13 8,900 Último mensaje 20 Octubre 2009, 20:06 pm
por Mr. Crowley
Parametro de funcion load() Ajax no ejecuta bien
PHP
Lupin 5 3,138 Último mensaje 20 Abril 2013, 19:11 pm
por Lupin
[JS] Ajax con cookie o editar cookie locale facebook antes del request
Desarrollo Web
patilanz 2 2,241 Último mensaje 29 Septiembre 2015, 15:41 pm
por patilanz
Curso gratis de Java ( orden correcto)
Java
luchoxmcbo 2 2,047 Último mensaje 2 Agosto 2016, 05:09 am
por luchoxmcbo
Duda Post Request y Request Headers
Desarrollo Web
0xFer 0 2,200 Último mensaje 22 Mayo 2017, 05:15 am
por 0xFer
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines