Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/05/2011, 14:29
Avatar de mdromed
mdromed
 
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 15 años, 2 meses
Puntos: 8
Varias ejecuciones seguidas de llamadas ajax

Esto me esta volviendo loco. Os cuento:

Quiero que cuando presiono al boton el evento onclick llame a 2 funciones ajax una detras de la otra, pero no se por que solo me ejecuta correctamente la que ponga en segunda posicion. Ya he probado a invertir el orden y solo ejecuta la ultima de las 2 funciones.
Sin embargo si entre dichas funciones pongo un "alert('hola');", sí que ejecuta las 2 funciones correctamente.
Ya he probado a meter un setTimeout en lugar del alert pero no funciona. Ni poniendo 5 segundos ni poniendo 10 segundos de retardo.
¿A que puede deberse???????

Este es el codigo javascript que lleva el boton de la pagina:
Código HTML:
<input type="button" value="OK" onclick="javascript: if(funDatosCorrectos){funAjaxGuardaProd('POST',varArrayImgEscogidas,'guardaProd.php');
 funAjaxAnyadeProductoAlPedido('POST',13,varIdProd,'anyadeProductoAlPedido.php','capa1','',1);}else{alert('No se ha hecho bien');}" /> 

Y aqui os muestro el contenido del fichero "ajaxFuncs.js" que contiene todo lo referente al ajax:

Código:
function fun_ajaxLeerDatos(arg_accion,arg_idObjHtmlContenedor,arg_idObjHtmlPresionado){
	switch(var_ObjetoXMLHttpRequest.readyState){
		case 4:{//Completed
			switch(arg_accion){
				case 'anyadeProdAlPedido':{
					var objHtmlActualizar;
					objHtmlActualizar = document.getElementById(arg_idObjHtmlContenedor);
					objHtmlActualizar.innerHTML = var_ObjetoXMLHttpRequest.responseText;
					if(arg_idObjHtmlPresionado != ''){fun_activaDesactivaObj(arg_idObjHtmlPresionado);}
					break;
				}
				}
				case 'salvaImgEscogidas':{
					//No mostramos nada en la pagina web pq con la ejecucion del php asociado a este proceso nos vale
					break;
				}
			}
		}
	}
}

function fun_ajaxCrearObjeto(){
	var var_objAjax;
	try{var_objAjax = new XMLHttpRequest();}
	catch(e){
		try{var_objAjax = new ActiveXObject("Microsoft.XMLHTTP");}
		catch(e){
			try{var_objAjax = new ActiveXObject("Msxml2.XMLHTTP");}
			catch(e){alert("Su navegador no soporta javascript o lo tiene deshabilitado."); var_objAjax=false;}
		}
	}
	
	return(var_objAjax);
}

var var_ObjetoXMLHttpRequest = fun_ajaxCrearObjeto();

function fun_ajaxAnyadeProductoAlPedido(arg_metodoEnvio,arg_idTipoProducto,arg_idProductoEscogido,arg_urlDestino,arg_idObjHtmlContenedor,arg_idObjHtmlPresionado,arg_cantidadProductoEscogido){
	var objHtmlCantidad;
	objHtmlCantidad = document.getElementById(arg_cantidadProductoEscogido);
	if(arg_idObjHtmlPresionado != ''){fun_activaDesactivaObj(arg_idObjHtmlPresionado);}
	var_ObjetoXMLHttpRequest.open(arg_metodoEnvio,arg_urlDestino);
	var_ObjetoXMLHttpRequest.onreadystatechange = function(){fun_ajaxLeerDatos('anyadeProdAlPedido',arg_idObjHtmlContenedor,arg_idObjHtmlPresionado);}
	var_ObjetoXMLHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	var_ObjetoXMLHttpRequest.send("arg_idTipoProducto=" + arg_idTipoProducto + "&arg_idProductoEscogido=" + arg_idProductoEscogido + "&arg_cantidadProductoEscogido=" + objHtmlCantidad.value);
}

function fun_ajaxGuardaProd(arg_metodoEnvio, arg_arrayImgEscogidas, arg_urlDestino, arg_idObjHtmlContenedor,arg_idObjHtmlPresionado){
	var varStringTodasImgEscogidas = '';
	//CON ESTE FOR TRANSFORMO EL ARRAY RECIBIDO EN UN STRING PARA PASARSELO A LA PAGINA .PHP
	for (i3 in arg_arrayImgEscogidas){
		if(i3==0){
			varStringTodasImgEscogidas += arg_arrayImgEscogidas[i3] + ',,,,,';
		}
		else{
			varStringTodasImgEscogidas += arg_arrayImgEscogidas[i3] + '<br />';
		}
	}
	var_ObjetoXMLHttpRequest.open(arg_metodoEnvio,arg_urlDestino);
	var_ObjetoXMLHttpRequest.onreadystatechange = function(){fun_ajaxLeerDatos('salvaImgEscogidas','','');}
	var_ObjetoXMLHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	var_ObjetoXMLHttpRequest.send("arg_stringImgEscogidas=" + varStringTodasImgEscogidas);
}