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

problemas retornando valor desde funcion ajax a funcion javascript

Estas en el tema de problemas retornando valor desde funcion ajax a funcion javascript en el foro de Frameworks JS en Foros del Web. Hola a todos, tengo un pequeño problema que no se como solucionar. Tengo una funcion en javascript que a su vez pide un valor a ...
  #1 (permalink)  
Antiguo 10/12/2008, 18:06
 
Fecha de Ingreso: septiembre-2008
Mensajes: 65
Antigüedad: 16 años, 3 meses
Puntos: 2
problemas retornando valor desde funcion ajax a funcion javascript

Hola a todos, tengo un pequeño problema que no se como solucionar.

Tengo una funcion en javascript que a su vez pide un valor a otra funcion esta vez ajax.

Todo parece funcionar bien excepto que cuando pido el valor de la variable de la funcion ajax me devuelve undefined, he hecho alerts en varios sitios para ver si me retorna el valor la funcion ajax y funciona correctamente pero la funcion javascrip no me coge el valor de retorno de la funcion ajax.

¿alguien me puede ayudaaarrr ?????

gracias de antemano.

aqui les dejo un ejemplo de lo que estoy hablando.

Código:
// la funcion javascript seria algo parecido

var valor_campo = devuelve_descripcion("tabla", "campo", "id");

//devuelve_descripcion es la funcion ajax
  #2 (permalink)  
Antiguo 10/12/2008, 18:24
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 6 meses
Puntos: 834
Respuesta: problemas retornando valor desde funcion ajax a funcion javascript

Lo que sucede es que AJAX se ejecuta de manera asíncrona, a menos que indiques lo contrario, y esto quiere decir que javascript no está obligado a detenerse en la línea donde hacés la petición hasta que esta se complete, para pasar a ejecutar la siguiente línea. Entonces, es muy probable que estés intentando acceder a un valor que aún no se encuentra disponible.
Por eso, cuando se trabaja con ajax, hay que asegurarse de tener la respuesta antes de intentar trabajar con ella, para lo cual lo que se hace es disparar los procesos recién cuando la propiedad readyState del objeto AJAX es igual a cuatro.

Última edición por Panino5001; 10/12/2008 a las 19:24
  #3 (permalink)  
Antiguo 11/12/2008, 03:36
 
Fecha de Ingreso: septiembre-2008
Mensajes: 65
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: problemas retornando valor desde funcion ajax a funcion javascript

Gracias por responder Panino5001, Tambien he probado a cambiar la ejecucion de la funcion para que no sea asincrono y la primera funcion tenga que esperar pero el resultado es el mismo.

Se os ocurre otra cosa?????

Gracias
  #4 (permalink)  
Antiguo 11/12/2008, 03:58
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problemas retornando valor desde funcion ajax a funcion javascript

¿Podrías poner tu código para que lo veamos?
  #5 (permalink)  
Antiguo 11/12/2008, 04:29
 
Fecha de Ingreso: septiembre-2008
Mensajes: 65
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: problemas retornando valor desde funcion ajax a funcion javascript

Bueno todo empieza en esta funcion que crea dinamicamente unas celdas dentro de una tabla de mi html.

Código:
function insertarFila() 
{
	var elmTBODY = document.getElementById('tabla_dinamica');
	var elmTR;
	var elmTD;
	var elmText;
	var elmImput;
	var numElem = document.getElementById('solicitud_presupuesto').elements.length;
	//alert(numElem);
	elmTR = elmTBODY.insertRow(-1);
	//for (var i=0; i<3; i++) 
	//{
	numElem++;
//AQUI ES DONDE ESTA EL PROBLEMA YA QUE QUIERO ASIGNARLE EL VALOR LITERAL AL INPUT NO EL VALOR DE LA BASE DE DATOS QUE ES NUMERICO PARA LO CUAL NECESITO ACCEDER A LA BASE DE DATOS PARA HACER LA CONVERSION Y PARA ELLO UTILIZO LA FINCION AJAX DEVILVE_DESCRIPCION.
	var valor_campo = devuelve_descripcion("ciclo_formativo", "descripcion", document.getElementById('ciclo_formativo_pedido').value);
	alert(valor_campo);
	elmTD = elmTR.insertCell(0);
	elmTD.valign = "center";
	elmTR.setAttribute("align", "center");
	elmInput = document.createElement('input');
	elmInput.setAttribute("name", "ciclo_apoyo_"+numElem);
	elmInput.setAttribute("id", "ciclo_apoyo_"+numElem);
	elmInput.setAttribute("value", valor_campo);
	elmInput.size = '15';
	elmInput.setAttribute("readonly", "readonly", false);
	//elmInput.onchange = function(){buscaCodPos(this.value,this.id);};
	elmInput.style.verticalAlign = "middle";
	elmText = document.createTextNode('Ciclo Formativo ');
	elmTD.appendChild(elmText);
	elmTD.appendChild(elmInput);
Aqui os pongo ahora la funcion ajax.

Código:
function devuelve_descripcion(tabla, campo, valor)
{
	var oXmlhttp = zXmlHttp.createRequest();
	
	oXmlhttp.open("get", "funciones.php?funcion=devuelve_descripcion&tabla="+tabla+"&campo="+campo+"&valor="+valor+"&nocache="+ Math.random(), false);
	
	oXmlhttp.onreadystatechange = function ()
	{
		if(oXmlhttp.readyState == 4)
		{
			if(oXmlhttp.status == 200) 
			{
				var respuesta = oXmlhttp.responseText;
				//alert(respuesta);
				return respuesta;
			}
		}
	}
	oXmlhttp.send(null);
}
Como veras tengo la asincronia a false para que la funcion javascript espere el fin de ejecucion pero nada de nada he probado a ver con varios alert() que la variable respuesta no venia vacia o con caracteres raros y efectivamente develve el dato sin problemas.

Me gustaria no tener que recurrir a crear inputs de tipo ocultos para coger el dato pero veo que no me va a quedar otra opcion.....

Gracias de nuevo a todos por las respuestas.
  #6 (permalink)  
Antiguo 11/12/2008, 04:37
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 6 meses
Puntos: 834
Respuesta: problemas retornando valor desde funcion ajax a funcion javascript

Cuando ponés el parámetro de asincronía a false no tenés que usar onreadystatechange (hay que eliminarlo, lo mismo que readyState y status)
Tendrías que investigar mejor cómo hacer peticiones síncronas, aunque lo mejor sería mantener la sincronía y trabajar con callBacks. Igualmente, para cualquiera de esos contextos ya convendría mover el posT a AJAX.
  #7 (permalink)  
Antiguo 11/12/2008, 04:40
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problemas retornando valor desde funcion ajax a funcion javascript

Tienes "la asincronía a false", pero estás intentando usar el evento readystatechange para devolver la respuesta, lo cual no es correcto.

Es decir, o bien utilizas el evento readystatechange y lo haces asíncrono, o bien lo haces síncrono y no utilizas el evento sino que recibes la respuesta directamente después del send(). Eso último sería algo como...

Código javascript:
Ver original
  1. function devuelve_descripcion(tabla, campo, valor) {
  2.     var oXmlhttp = zXmlHttp.createRequest();
  3.    
  4.     oXmlhttp.open("get", "funciones.php?funcion=devuelve_descripcion&tabla="+tabla+"&campo="+campo+"&valor="+valor+"&nocache="+ Math.random(), false);
  5.    
  6.     oXmlhttp.send(null);
  7.  
  8.     var respuesta = oXmlhttp.responseText;
  9.     //alert(respuesta);
  10.     return respuesta;
  11. }


De todos modos, mi consejo es que NO lo hagas síncrono. Mi consejo es que partas tu función insertarFila en dos partes y hagas la llamada asíncrona. Te va a ir mejor siempre.
  #8 (permalink)  
Antiguo 11/12/2008, 05:17
 
Fecha de Ingreso: septiembre-2008
Mensajes: 65
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: problemas retornando valor desde funcion ajax a funcion javascript

Muchas gracias a los dos por las respuestas voy a probar lo que me comentais.

No sabia que cuando se hace la peticion sincrona tenia que quitar los readystatechange... no te acostaras sin saber una cosa mas...

Por mi queda respondida mi duda, si necesito alguna aclaracion sobre el resto lo mirare en el foro de AJAX o habrire otro tema alli.

Muchas gracias de nuevo.

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 04:05.