Foros del Web » Programando para Internet » Javascript »

orden de ejecucion de las funciones

Estas en el tema de orden de ejecucion de las funciones en el foro de Javascript en Foros del Web. estoy trabajando en unas funciones de acceso a BBDD para comprobar y obtener los codigos y las descripciones de ficheros relacionados. La comprobacion la hago ...
  #1 (permalink)  
Antiguo 23/01/2008, 04:53
 
Fecha de Ingreso: agosto-2002
Ubicación: Lleida
Mensajes: 506
Antigüedad: 21 años, 8 meses
Puntos: 0
orden de ejecucion de las funciones

estoy trabajando en unas funciones de acceso a BBDD para comprobar y obtener los codigos y las descripciones de ficheros relacionados. La comprobacion la hago en ajax y me funciona bien: leo, compruebo y devuelvo en un div la cadena de campos del fichero que quiero leer.
el problema lo tengo que a continuacion debo coger el contenido del div y separarlo para poner en cada campo su valor
Código HTML:
<input   .... onblur="leer_articulo(); fraccionar();" /> 
la funcion leer_articulo lo hace todo bien, pero cuando se ejecuta fraccionar() el valor que recoge es el anterior al que modifica leer articulo. Parece que fraccionar() no espera a que leer_articulo() modifique el contenido del div

no se si soy muy claro, me podeis echar una mano?
graicas
  #2 (permalink)  
Antiguo 23/01/2008, 05:02
 
Fecha de Ingreso: agosto-2002
Ubicación: Lleida
Mensajes: 506
Antigüedad: 21 años, 8 meses
Puntos: 0
Re: orden de ejecucion de las funciones

bien, he avanzado algo ...
es un problema de orden de ejecucion, fraccionar() no espera a que acabe leer_articulo(), ya que si le pongo un
alert('parada')
al principio de la función fraccionar();
entonces funciona perfectamente ...
luego ahora lo que busco es como hacer que fraccionar() se espere a que acabe leer_articulo()

gracias
  #3 (permalink)  
Antiguo 23/01/2008, 09:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: orden de ejecucion de las funciones

Puedes usar un timeout al final de fraccionar para llamar a leer_articulo.

Saludos.

PD Tema trasladado a Javascript.
  #4 (permalink)  
Antiguo 24/01/2008, 04:03
 
Fecha de Ingreso: agosto-2002
Ubicación: Lleida
Mensajes: 506
Antigüedad: 21 años, 8 meses
Puntos: 0
Re: orden de ejecucion de las funciones

lo siento pero primero se ejecuta leer_articulo, y despues fraccionar.
he probado poner en fraccionar bucles de tiempo (for, while ...) pero nada, solo funciona si le pongo un alert()
dejo las funciones y su llamada quizas puedan decirme algo.

Código HTML:
function lleer_articulo(){
	//donde se mostrará lo resultados byId
	divcontenidor = document.getElementById('contenidor');
	
	//valores de los cajas de texto byName
	ajaxarticle=document.formdetall.i_article.value; 
	
	//instanciamos el objetoAjax
	ajax=objetoAjax();
	//usando del medoto POST
	//archivo que realizará la operacion ->actualizacion.php
	ajax.open("POST", "c_article.php",true);
	ajax.onreadystatechange=function() {
		if (ajax.readyState==4) {
			//mostrar los nuevos registros en esta capa
			divcontenidor.innerHTML = ajax.responseText
		}
	}
	//muy importante este encabezado ya que hacemos uso de un formulario
	ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	
	//enviando los valores
	ajax.send("idarticle="+ajaxarticle);
}

function fraccionar() {
                alert('parada'); // si quito el alert no funciona
	var textinici= contenidor.innerHTML;
	
	var textseparat = textinici.split('#');
	
	var codi = textseparat[0];
	var denom= textseparat[1];
	var preumig=parseFloat(textseparat[2]);	 
	
	formdetall.i_quantitat.value= denom;
	formdetall.i_preu.value=preumig;	 	 
	
	formdetall.i_import.focus();
}
la llamada desde el campo input
Código HTML:
<td> 
<input name="i_article" maxlength="10" type="text" id="i_article" size="10 onblur="leer_articulo(); fraccionar()" /> 
</td> 
  #5 (permalink)  
Antiguo 24/01/2008, 05:23
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: orden de ejecucion de las funciones

Hola mikil:

El problema pasa por llamar a fraccionar() cuando acabe de ejecutarse el evento onreadystatechange del objeto ajax que declaras dentro de leer_articulo(). Si la función leer_articulo() fuese javascript normal no tendrías ningún problema, pero al proponer el evento onreadystatechange ya estamos con javascript que no funciona de manera hilada, funciona cuando salta el evento.

Yo haría algo así:
Código PHP:
    ajax.onreadystatechange=function() {
        if (
ajax.readyState==4) {
            
//mostrar los nuevos registros en esta capa
            
divcontenidor.innerHTML ajax.responseText
            fraccionar
();
        }
    } 
Que es la solución básica. Pero como supongo que no quieres que se ejecute siempre fraccionar() después de cada llamada genérica a ese evento, lo que puede hacer es pasar por parámetro la función que quieres que se ejecute después:

Código PHP:
function lleer_articulo(functionDespues){
    
//...
    
ajax.onreadystatechange=function() {
        if (
ajax.readyState==4) {
            
//mostrar los nuevos registros en esta capa
            
divcontenidor.innerHTML ajax.responseText
            
if(typeof functionDespues==="function")
                
functionDespues();
        }
    }
    
//... 
Y se podría llamar desde el HTML de esta forma:
Código PHP:
<input name="i_article" maxlength="10" type="text" id="i_article" size="10 onblur="leer_articulo(fraccionar);" /> 

Espero no haberme equivocado al escribir el código, ni en el ámbito de las variables locales. Supongo que funcionará tanto para leer_articulo( funcionDefinida ) como para leer_articulo(), sin dar errores.

Saludos
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #6 (permalink)  
Antiguo 24/01/2008, 06:42
 
Fecha de Ingreso: agosto-2002
Ubicación: Lleida
Mensajes: 506
Antigüedad: 21 años, 8 meses
Puntos: 0
Re: orden de ejecucion de las funciones

no te has equivocado en nada. Funciona !
millones de gracias
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 16:57.