Foros del Web » Programando para Internet » Javascript »

alternativa a eval() para convertir a texto

Estas en el tema de alternativa a eval() para convertir a texto en el foro de Javascript en Foros del Web. Estaba usando eval() para asegurarme de que la respuesta que obtengo de PHP via ajax sea texto, y no un numero: if (eval(data)=="1"){ } Pero ...
  #1 (permalink)  
Antiguo 06/03/2010, 11:16
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
alternativa a eval() para convertir a texto

Estaba usando eval() para asegurarme de que la respuesta que obtengo de PHP via ajax sea texto, y no un numero:

if (eval(data)=="1"){

}

Pero eval me dio errores raros. Que puedo utilizar para convertir a texto en javascript?

Sin eval() anoche el script funcionaba. Pero hoy veo que en el servidor remoto obtengo "1" al hacer un alert desde la clausula else:

else{
alert(data);
};
  #2 (permalink)  
Antiguo 06/03/2010, 11:29
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: alternativa a eval() para convertir a texto

¿que tal si utilizas expresiones regulares?
Código:
/^('|")\d+\1$/
@edit,
de todos modos no veo porque evaluar el contenido si la respuestas de AJAX siempre son string.
Código:
if(data == "1")
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 06/03/2010, 11:55
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: alternativa a eval() para convertir a texto

Desde PHP devuelvo o "1" o algun error en texto (hay varias posibilidades):

Cita:
if(unlink($borrar)){
$response = "1"; //print "El nombre fue borrado";
}
else {
$response = "Unable to erase";
};
No se como implementar la propuesta de expresiones regulares. Que te imaginabas?

Respecto a esto: if(data == "1") ... ayer me pareció que funcionaba, pero hoy obtuve "1" en el alert, o sea que el 1 se saltó mi condicional, y se evaluó como excepción.
  #4 (permalink)  
Antiguo 06/03/2010, 12:07
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: alternativa a eval() para convertir a texto

tengo duda respecto a la respuesta de AJAX. como te devuelve el numero, ¿con las comillas o sin las comillas? si te lo devuelve sin comillas, se supone que te funcione data == "1" porque data ya es un string. si te lo devuelve con comillas, entonces tienes que incluirla en tu validacion, es decir data == '"1"'.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 06/03/2010, 12:12
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: alternativa a eval() para convertir a texto

Me lo devuelve sin las comillas.

Raro, no?

Estoy buscando un type of para javascript. Quiero comprobar que es lo que devuelve PHP: numero o cadena. (desde PHP lo imprimo con comillas, y debería ser cadena, pero al recibirlo... ya entro en duda.)

Otra cosa: esto me pasa en servidor remoto. En local todavía obtengo Welcome! como respuesta. Es decir, se evalúa el 1 como positivo, y se imprime "Welcome!".
  #6 (permalink)  
Antiguo 06/03/2010, 12:18
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: alternativa a eval() para convertir a texto

Acabo de probarlo así: alert(typeof data);

Tanto en local como en remoto me devuelve string. Pero en remoto me imprime 1. Y en local, Welcome!

O sea, no necesito eval(). Pero necesito entender que esta pasando!
  #7 (permalink)  
Antiguo 06/03/2010, 12:38
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: alternativa a eval() para convertir a texto

Cita:
Estoy buscando un type of para javascript. Quiero comprobar que es lo que devuelve PHP: numero o cadena.
aqui me confundes, ¿o quieres hacerlo en php o en javascript? en javascript tienes el operador typeof. en php tienes la funcion gettype y no se si existe alguno mas.

Cita:
(desde PHP lo imprimo con comillas, y debería ser cadena, pero al recibirlo... ya entro en duda.)
recuerda que responseText siempre es de tipo string independientemente como devuelvas el contenido en php. si lo devuelves con comillas, en ajax obtienes un string con comillas. si evaluas ese contenido con eval, javascript te devuelve un string porque esta evaluando un string que tiene comillas. si no tuviera comillas te devuelve un numero. para que lo puedas entender...

si en php devuelves con comillas... ejemplo "1"
Código:
responseText == "1";
// devuelve false porque responseText es un string con comillas
// "1" es un string literial de javascript

eval(responseText ) == "1";
// devuelve true porque estas evaluando el string de responseText
// por tanto, eval lee "1" del responseText y al evaluarlo devuelve un string "1" 
si en php devuelves sin comillas... ejemplo 1
Código:
responseText == "1";
// devuelve true, de nuevo responseText es un string y se esta comparando con un string literal de javascript

eval(responseText) == "1";
// devuelve true.
// en este caso particular eval lee 1 y lo converte a numero, entonces estas comparando un numero con un string literal
// pero automaticamente javascript convierte el numero a string porque esta comparando dos tipos de valores diferentes
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 06/03/2010 a las 12:44
  #8 (permalink)  
Antiguo 06/03/2010, 12:40
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 18 años, 6 meses
Puntos: 19
Respuesta: alternativa a eval() para convertir a texto

isNaN
isFinite
toString


ajax.responseText... por mas que vos devuelvas o no texto con PHP, ajax te lo lee como texto

saludos
  #9 (permalink)  
Antiguo 06/03/2010, 12:52
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: alternativa a eval() para convertir a texto

Me queda mas claro. Siempre obtengo texto.

en cuanto a typeof, fue una confusion mia. La funcion pertenece efectivamente a javascript.

Ahora, respecto a lo que planteas, la diferencia estaría en ponerle o no comillas al PHP. Entonces modifique mis repuestas y quedaron asi:

echo 1;

Y la evaluo así:

if (data=="1"){
alert("Welcome!");
setTimeout("location.reload(true)",1500);
} else{

alert(data);
};

Pero sigo recibiendo 1 en vez de Welcome cuando estoy en servidor remoto. :(
  #10 (permalink)  
Antiguo 06/03/2010, 12:57
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: alternativa a eval() para convertir a texto

pues la verdad no se que decirte. lo unico que me hace pensar es que responseText debe contener, ademas del numero, algun otro caracter invisible como whitespace. intenta hacer un alert de esta forma
Código:
alert('"' + data + '"');
si hay espacio u otra cosa dentro de las comillas dobles, pues ahi debe estar tu problema. dos string distintos evaluan a false. si no hay espacios, pues la verdad no se que esta pasando.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #11 (permalink)  
Antiguo 06/03/2010, 13:02
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 18 años, 6 meses
Puntos: 19
Respuesta: alternativa a eval() para convertir a texto

proba..

Código Javascript:
Ver original
  1. alert("data: "+data);
  2. if (data=="1"){
  3. alert("if");
  4. }
  5. else if (data==1){
  6. alert("else if");
  7. }
  8. else{
  9. alert("else");
  10. }

si o si te tiene que devolver "1"(si es que en PHP devolves 1/"1"..)
  #12 (permalink)  
Antiguo 06/03/2010, 13:10
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: alternativa a eval() para convertir a texto

Gracias. Probando tu codigo encontré la solución.

En realidad, yo no lo dije todo y estaba usando un sustituto del alert() para mostrar la respuesta . Cuando usé un verdadero alert() recibí esto:

Cita:
"1
<!-- www.000webhost.com Analytics Code -->
<script type="text/javascript" src="http://analytics.hosting24.com/count.php"></script>
<noscript><a href="http://www.hosting24.com/"><img src="http://analytics.hosting24.com/count.php" alt="web hosting" /></a></noscript>
<!-- End Of Code -->
"
Es un pie que pone mi servidor, a menos que le escriba un die() de PHP.

Gracias mil!
  #13 (permalink)  
Antiguo 06/03/2010, 20:06
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: alternativa a eval() para convertir a texto

Gracias Fernando!

Acabo de entrar en una situación en donde el alert('"' + data + '"'); me devolvía:

"
1"

Y lo resolví haciendo como proponías: if (data==1) en vez de if (data=="1")
  #14 (permalink)  
Antiguo 06/03/2010, 20:29
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: alternativa a eval() para convertir a texto

solo para orientarte, no tiene diferencia si lo comparas con un string o un numero. al responseText ser un string, el numero literal es convertido a string.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #15 (permalink)  
Antiguo 06/03/2010, 22:28
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: alternativa a eval() para convertir a texto

Voy a pensar en esto seriamente, porque me dejó descolocado todo el día. Te agradezco mucho todos los comentarios.

Etiquetas: eval
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:31.