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

problema con return en una funcion

Estas en el tema de problema con return en una funcion en el foro de Frameworks JS en Foros del Web. hola, uso la siguiente funcion Código PHP: function  cargar ( url ,  metodo ,  parametros ,  id_capa ,  id_capa_espera ,  msj_espera ,  ejecutar ) { ...
  #1 (permalink)  
Antiguo 28/03/2008, 09:41
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 18 años, 4 meses
Puntos: 19
De acuerdo problema con return en una funcion

hola, uso la siguiente funcion
Código PHP:
function cargar(urlmetodoparametrosid_capaid_capa_esperamsj_esperaejecutar)
{
    var 
ajax Conectar();
    var 
cargador document.getElementById(id_capa);
    if(
ajax)
    {
        
ajax.open(metodourltrue);
        
ajax.onreadystatechange = function() {
            if(
ajax.readyState == 1)
            {
                if(
id_capa_espera !== "") {
                    
cargador.innerHTML msj_espera;
                }
            } else if (
ajax.readyState == 4) {
                    var 
respuesta ajax.responseText;
                    if(
id_capa !== "") {
                        
cargador.innerHTML respuesta;
                    }
                    if(
ejecutar !== "")
                    {
                        eval(
ejecutar);
                    }
                    return 
respuesta;
            }
        }
        
ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        
ajax.send(parametros);
    }

si defino id_capa al llamar a la funcion el resultado se muestra correctamente en esa capa...

pero agregue un RETURN RESPUESTA para poder usar el resultado de la funcion en otras funciones como la siguiente
Código PHP:
function cargarDatosTitular(id_titular){
    var 
datos cargar('action.titularCargarDatos.php''POST''id='+id_titular'''''');
    
window.alert(datos);

pero no se poruqe me sale como resultado un "undefinied" si el responseText es correcto :S

muchas gracias desde ya,
  #2 (permalink)  
Antiguo 28/03/2008, 09:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Re: problema con return en una funcion

No puedes hacer eso que propones, ya que recuerda que las llamadas en AJAX son asíncronas, lo que puedes hacer es guardar la variable datos en una variable global y luego leerla:
Código:
var datos;
function cargar(url, metodo, parametros, id_capa, id_capa_espera, msj_espera, ejecutar)
{
    var ajax = Conectar();
    var cargador = document.getElementById(id_capa);
    if(ajax)
    {
        ajax.open(metodo, url, true);
        ajax.onreadystatechange = function() {
            if(ajax.readyState == 1)
            {
                if(id_capa_espera !== "") {
                    cargador.innerHTML = msj_espera;
                }
            } else if (ajax.readyState == 4) {
                    var respuesta = ajax.responseText;
                    if(id_capa !== "") {
                        cargador.innerHTML = respuesta;
                    }
                    if(ejecutar !== "")
                    {
                        eval(ejecutar);
                    }
                    

                    datos = respuesta;
                    alert( datos );
            }
        }
        ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        ajax.send(parametros);
    }
}
Ya posteriormente al terminar la llamada AJAX puedes leer desde cualquier lado la variable datos.

Saludos.
  #3 (permalink)  
Antiguo 28/03/2008, 10:51
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años, 6 meses
Puntos: 35
Re: problema con return en una funcion

loading.......

Claro que puedes hacerlo si pones la conexión como SINCRONA


Código PHP:
function cargar(urlmetodoparametrosid_capaid_capa_esperamsj_esperaejecutar)
{
    var 
ajax Conectar();
    var 
cargador document.getElementById(id_capa);
    if(
ajax)
    {
        
cargador.innerHTML msj_espera;
        
ajax.open(metodourlfalse);  //notese -> false <-
        
ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        
ajax.send(parametros);
        var 
respuesta ajax.responseText;
        if(
id_capa !== "")
        {
                      
cargador.innerHTML respuesta;
         }
         if(
ejecutar !== "")
         {
                        eval(
ejecutar);
         }
         return 
respuesta;
     } 
     else{return 
"";}

Código PHP:
function cargarDatosTitular(id_titular){
    var 
datos cargar('action.titularCargarDatos.php''POST''id='+id_titular'''''');
    
window.alert(datos);

probalo y avisas :D

connection closed.
__________________

Maborak Technologies
  #4 (permalink)  
Antiguo 28/03/2008, 11:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Re: problema con return en una funcion

Pero lo malo de cuando es sincronía es que te cuelga el navegador hasta obtener la respuesta jejeje
  #5 (permalink)  
Antiguo 28/03/2008, 14:45
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años, 6 meses
Puntos: 35
Re: problema con return en una funcion

loading.............

Oh si!!! es lo peor!!!, pareciera que ponen un while infinito hasta que termine la operación... simplemente NADA RESPONDE en el navegador cuando es sincrono.. :(

Pero una forma que yo hacía para que funcione es...

Código PHP:
setTimeout(function(){
  
//aqui todo lo sincrono
}500); 
Y no se me cuelga :D

connection closed.
__________________

Maborak Technologies
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 13:14.