Tengo el siguiente problema, lo que quiero es retornar el contenido de la respuesta a la Peticion Http que hago mediante el objeto XMLHttpRequest para manipularlo mediante otro script y no modificar el contenido de un <DIV> directamente. El responseText lo manipulo dentro del evento onreadystatechange por lo que se retorna solo cuando el readyState es igual a 4, entonces siempre que hago la petición, me retorna "undefined". La pregunta es ¿Cómo hago para retornar el texto del responseText, pero de tal forma que no me retorne "undefined" sino el texto que me debe retornar el script PHP?. Probablemente como el contenido de responseText aún no se ha asignado porque no se ha terminado de procesar la petición. De todas formas acá les mando el código Javascript:
Código:
var respuesta_peticion; /* ********************************************* CREAR OBJETO AJAX ********************************************************** */ /* * DESCRIPCIÓN: * Crea el Objeto que manejará asíncronamente la petición HTTP * RETORNA: * Un objeto ActiveXObject, si el navegador es Internet Explorer * Un objeto XMLHttpRequest, si el navegador es diferente de Internet Explorer * false, en caso de que no se pueda crear el objeto */ function crearObjetoAjax() { var objeto_ajax; //Objeto Ajax try { objeto_ajax = new ActiveXObject("Msxml2.XMLHTTP"); //Para Internet Explorer } catch(excepcion) { try { objeto_ajax = new ActiveXObject("Microsoft.XMLHTTP"); //Para Internet Explorer } catch(excepcion) { objeto_ajax = false; } } if (!objeto_ajax && typeof XMLHttpRequest!='undefined') { objeto_ajax = new XMLHttpRequest(); //Otros navegadores diferentes de Internet Explorer } return objeto_ajax; } /* **************************************************** REALIZAR PETICIÓN HTTP *********************************************************** */ /* * DESCRIPCIÓN: * Realiza la Petición HTTP asíncrona al Servidor * PARÁMETROS: * metodo_peticion -> El método por el que se desea realizar la petición (GET o POST) * objetivo_peticion -> La página o el script al cual va dirigido la petición * tipo_respuesta -> El tipo en el que se desea que se retornen los datos desde el Servidor (TEXTO o XML) * datos_post (opcional) -> Los datos que se desean enviar si se realiza una petición POST. Estos datos deben ir encapsulados dentro de un * String de la forma "dato1=valor1&dato2=valor2&...&daton=valorn" * RETORNA: * Un String, en caso de que el tipo de respuesta sea TEXT * Un objeto XML, en caso de que el tipo de respuesta sea XML * false, en caso de que no se pueda encontrar la página a la que va dirigida la petición */ function realizarPeticionHttp(metodo_peticion, objetivo_peticion, tipo_respuesta, datos_post) { var objeto_ajax = crearObjetoAjax(); //Objeto para la conexión asíncrona al Servidor if(objeto_ajax) { objeto_ajax.open(metodo_peticion, objetivo_peticion, true); if(metodo_peticion == "GET") { objeto_ajax.send(null); } else { if(metodo_peticion == "POST" && datos_post != null) { objeto_ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); objeto_ajax.send(datos_post); } } objeto_ajax.onreadystatechange = function() { if (objeto_ajax.readyState == 4) //Petición completada { if(objeto_ajax.status == 200) //Respuesta "OK" { switch(tipo_respuesta) { case "TEXTO": respuesta_peticion = objeto_ajax.responseText; case "XML": respuesta_peticion = objeto_ajax.responseXML; } } else //Respuesta "Not Found" { switch(tipo_respuesta) { case "TEXTO": respuesta_peticion = ""; case "XML": respuesta_peticion = null; } } } } return true; } else { return false; } } function hacerPeticion() { realizarPeticionHttp("GET", "prueba.php", "TEXTO"); document.getElementById("texto").innerHTML = respuesta_peticion; }