Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Varias ejecuciones seguidas de llamadas ajax

Estas en el tema de Varias ejecuciones seguidas de llamadas ajax en el foro de Frameworks JS en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 19/05/2011, 15:29
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 9 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);
}
  #2 (permalink)  
Antiguo 20/05/2011, 07:49
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 9 años, 2 meses
Puntos: 8
Respuesta: Varias ejecuciones seguidas de llamadas ajax

Ayuda por favor!!!!!!!!!!!!!!!!!!!!!!!!
  #3 (permalink)  
Antiguo 20/05/2011, 09:13
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 7 años, 6 meses
Puntos: 344
Respuesta: Varias ejecuciones seguidas de llamadas ajax

El problema es que creas un sólo objeto para realizar las peticiones ajax. Tienes que crear un objeto por cada petición que quieras realizar, porque si no al realizar otra petición con el mismo objeto se aborta la anterior.
  #4 (permalink)  
Antiguo 20/05/2011, 11:06
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 9 años, 2 meses
Puntos: 8
Respuesta: Varias ejecuciones seguidas de llamadas ajax

Cita:
Iniciado por alexg88 Ver Mensaje
El problema es que creas un sólo objeto para realizar las peticiones ajax. Tienes que crear un objeto por cada petición que quieras realizar, porque si no al realizar otra petición con el mismo objeto se aborta la anterior.
Ok voy a probar a ver.
Muchas gracias
  #5 (permalink)  
Antiguo 22/05/2011, 15:38
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 9 años, 2 meses
Puntos: 8
Respuesta: Varias ejecuciones seguidas de llamadas ajax

Sí que era ese el problema alexg88.
Muchisimas gracias porque me estaba volviendo loco!

Saludos!!!!!!

Etiquetas: ajax, ejecucion, ejecuciones, funciones, retardo, simultaneas
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 06:42.