Foros del Web » Programando para Internet » Javascript »

Funciona que retorna undefined

Estas en el tema de Funciona que retorna undefined en el foro de Javascript en Foros del Web. Buenas, estoy muy pez con el javascript y necesito hacer funcionar una tema de traducción con Google. Tengo la siguiente función: Código: <script type="text/javascript"> google.load("language", ...
  #1 (permalink)  
Antiguo 14/04/2009, 04:56
 
Fecha de Ingreso: octubre-2004
Mensajes: 31
Antigüedad: 19 años, 6 meses
Puntos: 0
Funciona que retorna undefined

Buenas, estoy muy pez con el javascript y necesito hacer funcionar una tema de traducción con Google. Tengo la siguiente función:

Código:
<script type="text/javascript">
google.load("language", "1");
</script>
<script type="text/javascript">
function traducir(texto, lang){

google.language.translate(texto, 'es', lang, function(result) {
     return result.translation;
	});
}
</script>
La llamo desde aqui:

Código:
<SCRIPT LANGUAGE="JavaScript" TYPE="TEXT/JAVASCRIPT">
<!--

lang="en";
texto="<p>Hola</p><p>Esto es una <strong>palabra</strong> en negrita y <em>esta</em> en cursiva.</p>";
txt=traducir(texto,lang);
document.write(txt);

//-->
</SCRIPT>
Pues siempre se muestra en pantalla "undefined". He mirado varias paginas respecto el paso y devolución de funciones y no encuentro el qué.

Además, si en la primera función sustituyo el
Código:
return result.translation;
por
Código:
document.write(result.translation);
me muestra la traducción.

¿Algún alma caritativa podría darme alguna indicación?. Gracias y saludos.
  #2 (permalink)  
Antiguo 14/04/2009, 09:19
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 2 meses
Puntos: 62
Respuesta: Funciona que retorna undefined

el problema que tienes es que no devuelves el resultado a nada, lo dejas ahi colgado, prueba con esto:
Código javascript:
Ver original
  1. <script type="text/javascript">
  2. google.load("language", "1");
  3. </script>
  4. <script type="text/javascript">
  5. function traducir(texto, lang){
  6. var a = google.language.translate(texto, 'es', lang, function(result) {
  7.      return result.translation;
  8.     });
  9. return a;
  10. }
  11. </script>
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #3 (permalink)  
Antiguo 15/04/2009, 01:18
 
Fecha de Ingreso: octubre-2004
Mensajes: 31
Antigüedad: 19 años, 6 meses
Puntos: 0
Respuesta: Funciona que retorna undefined

Pues me sigue devolviendo "undefined". Entonces cambio la pregunta y la planteo de otra manera: haciendo directamente el document.write me muestra la página con sólo la frase traducida y el fondo en blanco. ¿Hay alguna otra manera de mostrar el resultado?
  #4 (permalink)  
Antiguo 15/04/2009, 01:54
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 2 meses
Puntos: 62
Respuesta: Funciona que retorna undefined

Ese problema se deba a que si el documento está cargado y haces un document.write() se borra el contenido del documento y se escribe el contenido del document.write(), mientras que si la página está cargandose haces el document.write el resultado se muestra donde lo apliques.
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #5 (permalink)  
Antiguo 15/04/2009, 02:03
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Funciona que retorna undefined

Quizá no hayas mirado demasiado bien la documentación, pero el caso es que el funcionamiento de google.language.translate es asíncrono. Por eso le pasas como último parámetro una función de callback, para que cuando se reciba la respuesta, se llame a esa función.

La función no puede devolver un valor a quien llama a google.language.translate porque esa llamada ya habrá terminado cuando la función se ejecute. Lo que tengas que hacer con la respuesta, lo tienes que hacer ahí dentro.

Y en cuanto a eso, no te recomiendo hacer un document.write. Crea algún elemento contenedor en el HTML (un div o un span, por ejemplo) y modifica su innerHTML en lugar de eso.
  #6 (permalink)  
Antiguo 19/04/2009, 03:07
 
Fecha de Ingreso: octubre-2004
Mensajes: 31
Antigüedad: 19 años, 6 meses
Puntos: 0
Respuesta: Funciona que retorna undefined

Cita:
Iniciado por venkman Ver Mensaje
Quizá no hayas mirado demasiado bien la documentación, pero el caso es que el funcionamiento de google.language.translate es asíncrono. Por eso le pasas como último parámetro una función de callback, para que cuando se reciba la respuesta, se llame a esa función.

La función no puede devolver un valor a quien llama a google.language.translate porque esa llamada ya habrá terminado cuando la función se ejecute. Lo que tengas que hacer con la respuesta, lo tienes que hacer ahí dentro.

Y en cuanto a eso, no te recomiendo hacer un document.write. Crea algún elemento contenedor en el HTML (un div o un span, por ejemplo) y modifica su innerHTML en lugar de eso.
He encontrado otra manera de hacerlo que hace exactamente eso. Gracias a todos por la ayuda.
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 19:58.