Comunidad de diseño web y desarrollo en internet online

Return de valores mediante AJAX

Citar            
MensajeEscrito el 11 Jun 2009 07:24 pm
Amigos… tengo un inconveniente con Javascript… Resulta estoy haciendo un sistema de valoración en donde mediante AJAX se envía el valor y se carga en una etiqueta DIV con el nuevo resultado de la valoración. Disponía de una función que si funcionaba y lo hacia correctamente pero en este proyecto en especial quiero alterar su funcionamiento y hacer funciones mas maleables.

El código actual es el siguiente:

Código Javascript :

function Valorar(ID, Valor){   
   var Respuesta = Ejecutar('archivo.php?Accion=Valorar&ID=' + ID + '&Valor=' + Valor);
            
   document.getElementById('Puntaje').innerHTML = '<strong>Nuevo Puntaje:</strong> ' + Respuesta;
}

function getXMLHttpRequest(){
   var Versiones = [ "MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp","Microsoft.XMLHttp"];
   if (window.XMLHttpRequest){
      return new XMLHttpRequest();
   }
   else if(window.ActiveXObject){
      for(var i = 0; i < Versiones.length; i++){
         try{
            var oXmlHttp = new ActiveXObject(Versiones[i]);
            return oXmlHttp;
         }
         catch(error){
      
         }
      }
   }
}
         
function Ejecutar(Pagina){
   var Pagina_Solicitada = getXMLHttpRequest();
   Pagina_Solicitada.open ('GET', Pagina, true);   
   Pagina_Solicitada.onreadystatechange = function(){
      var Resultado = Devolver_Valor(Pagina_Solicitada);

      return Resultado;      
   }   
   Pagina_Solicitada.send (null);
}

function Devolver_Valor(Valor){
   var Pagina_Solicitada = Valor;
   
   if (Pagina_Solicitada.readyState == 4){
      if((Pagina_Solicitada.status == 200 || window.location.href.indexOf ("http") == - 1)){
      
         return Pagina_Solicitada.responseText;
      
      }
   }
}



Mi problema esta en que cuando intento mostrar el valor con la función Valorar() no lo muestra ya que le función Ejecutar devuelve undefined… si ejecuto la función Ejecutar() también devuelve undefined… pero si modifico:

Código Javascript :

//en la funcion Ejecutar
return Resultado; 

//Por esto... si muestra los valores…
document.getElementById('Puntaje').innerHTML = '<strong>Nuevo Puntaje:</strong> ' + Resultado;


Pero como dije quería que la función fuera mas personalizada ya que la utilizare para diferentes cosas no solo para este sistema.

Espero haberme explicado correctamente..

Saludos!! :)

Por Zis

Claber

314 de clabLevel

1 tutorial

Genero:Masculino  

Bell Ville - Cordoba - Argentina

firefox
Citar            
MensajeEscrito el 12 Jun 2009 10:26 am
Hola,

No entiendo bien porqué estas mostrando el valor de la variable 'Respuesta' en la función Valorar(). Siempre va a ser 'undefined', porque lo estas igualando al valor devuelto por la función Ejecutar(), que al no tener ningún valor de retorno asignado, devuelve 'undefined' por defecto. Ten en cuenta que el único 'return' que tienes en Ejecutar() es de la función anónima que estás asignando al evento 'onreadystatechange', no de la propia función Ejecutar().

Por Pablo.L.Pastor

4 de clabLevel



 

Spain

firefox
Citar            
MensajeEscrito el 12 Jun 2009 04:19 pm
Gracias por tu respuesta amigo! No comprendí del todo… decís que el valor Respuesta de la función Valorar() siempre va a ser undefined porque el valor de retoro de la función Ejecutar es undefined… pero es justamente ahí en donde esta mi problema no se porque devuelve undefined cundo debería devolver el valor que necesito pero si quito el return que se encuentra dentro de el evento onreadystatechange
La variable Resultado ya no se encuentra definida...

Me podrías decir de que manera modificar esto para que la función ejecutar devuelva el valor necesario?

Saludos! :D

Por Zis

Claber

314 de clabLevel

1 tutorial

Genero:Masculino  

Bell Ville - Cordoba - Argentina

firefox
Citar            
MensajeEscrito el 12 Jun 2009 05:08 pm
La función EJecutar() devuelve 'undefined' por lo que te he explicado. No tiene ningún return. EL único que tienes puesto pertenece a una función interna.

Aunque devolvieras un valor tampoco te serviría, porque el evento onreadystatechange se va a ejecutar de forma asíncrona, un tiempo despues. Para cuando se produzca este evento ya se habrá ejecutado tu línea:

document.getElementById('Puntaje').innerHTML = '<strong>Nuevo Puntaje..........

La forma correcta de hacer lo que quieres, es la solución que tienes en el segundo recuadro de tu código, en el primer mensaje de este hilo ¿cual es el problema con esa solución?.

Por Pablo.L.Pastor

4 de clabLevel



 

Spain

firefox
Citar            
MensajeEscrito el 12 Jun 2009 06:11 pm
el problema de esa solución es que solo me sirve para mostrar los valores, pero a la función Ejecutar le utilizo para diferentes cosas por lo que no siempre necesito mostrar el valor

Por Zis

Claber

314 de clabLevel

1 tutorial

Genero:Masculino  

Bell Ville - Cordoba - Argentina

firefox
Citar            
MensajeEscrito el 12 Jun 2009 07:31 pm
Lo más sencillo que puedes hacer el convertir Resultado en una variable global (simplemente quita el 'var' de delante) y despues puedes utilizarlo donde quieras.

Otra opción, sin usar variables globales, sería hacer diferentes acciones en la funcion del evento onreadystatechange, seleccionando la acción según un parámetro que le pases a Ejecutar(). En un caso mostrarias el valor, en otros harías otras cosas.

Por Pablo.L.Pastor

4 de clabLevel



 

Spain

firefox
Citar            
MensajeEscrito el 12 Jun 2009 10:28 pm
eh probado convirtiendo la variable en global pero aun asi no funciona y probando la otra opción es lo mismo puesto que cuando quiero mostrar el valor con document.getElementById('Puntaje').innerHTML si funciona pero cuando necesito hacer algún procedimiento mostrando la variable Resultado tengo el mismo problema...

nunca me gusto JS pero le pongo ganas para aprenderlo y se empeña en que cada ves me guste menos jaja...

otra solución?
saludos!!

Por Zis

Claber

314 de clabLevel

1 tutorial

Genero:Masculino  

Bell Ville - Cordoba - Argentina

firefox
Citar            
MensajeEscrito el 13 Jun 2009 11:39 am
Si puedes poner el código modificado de la función Ejecutar(), con las otras cosas que intentas hacer, podemos intentar ver cuál es el problema.

Saludos

Por Pablo.L.Pastor

4 de clabLevel



 

Spain

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.