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!!!