Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/03/2009, 19:53
isra00
Invitado
 
Mensajes: n/a
Puntos:
Pregunta AJAX: devolver el valor de la respuesta

Hola, estoy empezando con AJAX y no encuentro la manera (sin librerías del estilo de jQuery y demás) de hacer una función que devuelva el contenido de la petición. Con la siguiente función puedo hacer peticiones y realizar operaciones con la salida:

Código:
//Carga un script y su respuesta en texto o xml, y ejecuta la función especificada como parámetro
//La función funcion_trigger debe tener un parámetro que tomará el valor de la respuesta
function ajax(url, xml, funcion_trigger) {
	//Construye un manejador AJAX adecuado al navegador
	var req;
	variable_global = "segundo valor";
	try {
		// Opera 8.0+, Firefox, WebKit
		req = new XMLHttpRequest();
	} catch (e) {
		// Internet Explorer
		try{
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try{
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e){
				alert("Navegador no compatible con AJAX!");
				return false;
			}
		}
	}

	req.onreadystatechange = function() {
		if (req.readyState == 4) {
			if (req.status == "200") {
				var respuesta;
				respuesta = (xml) ? req.responseXml:req.responseText;
				funcion_trigger(respuesta);
			} else respuesta = null;
		}
	}
	req.open("GET", url);
	req.send("");
}
Pero con este método debo pasarle a la función un argumento que sea la acción a realizar con la respuesta. Me gustaría que la función ajax() sencillamente devolviese la respuesta, para poder hacer cosas como
Código:
texto_Respuesta = ajax(...)
. Lo he intentado almacenando el valor en una variable global:

Código:
var respuesta_global; //Variable global para intercambiar valores entre funciones
//Carga un script y su respuesta en texto o xml, y ejecuta la función especificada como parámetro
//La función funcion_trigger debe tener un parámetro que tomará el valor de la respuesta
function ajax(url, xml, funcion_trigger) {
	//Construye un manejador AJAX adecuado al navegador
	var req;
	variable_global = "segundo valor";
	try {
		// Opera 8.0+, Firefox, WebKit
		req = new XMLHttpRequest();
	} catch (e) {
		// Internet Explorer
		try{
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try{
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e){
				alert("Navegador no compatible con AJAX!");
				return false;
			}
		}
	}

	req.onreadystatechange = function() {
		if (req.readyState == 4) {
			if (req.status == "200") {
				var respuesta;
				respuesta = (xml) ? req.responseXml:req.responseText;
				respuesta_global = respuesta;
			} else respuesta = null;
		}
	}
	req.open("GET", url);
	req.send("");

	return respuesta_global;
}
Pero así no funciona, ya que (no sé por qué) primero se ejecuta el return de ajax() y después la acción de onreadystatechange. ¿Cómo puedo resolver el problema? ¿Sabéis algún otro modo sencillo de devolver el contenido de la respuesta? (insisto, sin librerías tipo jQuery). Gracias!!!