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

Problema con un return

Estas en el tema de Problema con un return en el foro de Frameworks JS en Foros del Web. Estoy intentando hacer algo muy simple pero no funciona Código: function createRequestObject(){ var peticion; var browser = navigator.appName; if(browser == "Microsoft Internet Explorer"){ peticion = ...
  #1 (permalink)  
Antiguo 24/11/2009, 10:51
 
Fecha de Ingreso: enero-2002
Mensajes: 182
Antigüedad: 22 años, 11 meses
Puntos: 0
Problema con un return

Estoy intentando hacer algo muy simple pero no funciona

Código:
function createRequestObject(){
      var peticion;
      var browser = navigator.appName;
            if(browser == "Microsoft Internet Explorer"){
                  peticion = new ActiveXObject("Microsoft.XMLHTTP");
            }else{
                  peticion = new XMLHttpRequest();
}
return peticion;
}


var http = new Array();
function ObtDatos(url){
      var act = new Date();
      http[act] = createRequestObject();
      http[act].open('get', url);
      http[act].onreadystatechange = function() {
      if (http[act].readyState == 4) {
            if (http[act].status == 200 || http[act].status == 304) {
		  		var texto; 
				texto = http[act].responseText;
				 return texto;
			}
		}
	}
	http[act].send(null);
}

document.write(ObtDatos("http://midireccion/datos.php"));
Me dice que undefined si lo pongo directamente el document.write en la función con "texto" me lo hace bien no funciona el return y no tengo ni idea de pq.

Un slaudo y gracias.
  #2 (permalink)  
Antiguo 24/11/2009, 20:07
 
Fecha de Ingreso: febrero-2009
Mensajes: 44
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Problema con un return

Prueba con

createRequestObject = function(){
var peticion;
var browser = navigator.appName;
if(browser == "Microsoft Internet Explorer"){
peticion = new ActiveXObject("Microsoft.XMLHTTP");
}else{
peticion = new XMLHttpRequest();
}
return peticion;
}


var http = new Array();
function ObtDatos(url){
var act = new Date();
http[act] = new createRequestObject();
http[act].open('get', url);
http[act].onreadystatechange = function() {
if (http[act].readyState == 4) {
if (http[act].status == 200 || http[act].status == 304) {
var texto;
texto = http[act].responseText;
return texto;
}
}
}
http[act].send(null);
}




Saludos
  #3 (permalink)  
Antiguo 25/11/2009, 04:02
 
Fecha de Ingreso: enero-2002
Mensajes: 182
Antigüedad: 22 años, 11 meses
Puntos: 0
Respuesta: Problema con un return

Me da "undefined" también.
  #4 (permalink)  
Antiguo 25/11/2009, 09:48
 
Fecha de Ingreso: septiembre-2009
Mensajes: 81
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Problema con un return

Personalmente no se cual es el error pero esk la forma en la k creas tu objeto ajax no me gusta nada.... question de "feeling" xDD Prueba con otro codigo... Te pasteo el k yo uso a ver si te va:

Cita:
var new_page = false
if (window.XMLHttpRequest) {
// checks if browser is opera, safari, mozilla, etc.
new_page = new XMLHttpRequest()
}else if (window.ActiveXObject){
// checks if browser is internet explorer
try {
new_page = new ActiveXObject("Msxml2.XMLHTTP")
}catch (e){
// if old version of internet explorer
try{
new_page = new ActiveXObject("Microsoft.XMLHTTP")
}catch (e){
}
}
}
  #5 (permalink)  
Antiguo 25/11/2009, 11:02
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 8 meses
Puntos: 839
Respuesta: Problema con un return

Lo que pasa es que la petición se ejecuta de forma asíncrona. Por lo que al ejecutarse el evento onreadystatechange ya terminó la función y se devolvió un valor nulo. Para hacer lo que quieres, debes hacer una petición síncrona:
Código Javascript:
Ver original
  1. ajax.open(..., ..., false);
  2. ajax.send(...);
  3. alert(ajax.responseText);
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #6 (permalink)  
Antiguo 26/11/2009, 03:09
 
Fecha de Ingreso: enero-2002
Mensajes: 182
Antigüedad: 22 años, 11 meses
Puntos: 0
Respuesta: Problema con un return

Efectivamente era eso gracias David.
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 18:49.