javascript typeof no funciona con variables de PHP?

Solo me preguntaba, ¿la verificación de javascript "typeof" (ya sabes, lo que haces para verificar variables indefinidas en javascript) no funciona de la misma manera con PHP vars?

Que hago

alert(typeof <? echo $_SESSION['thing'] ?>);

y esto ni siquiera se ejecuta (supongo que al menos aparecería en blanco)

Pero si lo hago

alert(<? echo $_SESSION['thing'] ?>);

la alerta dice "indefinido"

Entonces, me pregunto si la forma correcta de verificar si hay vars de PHP indefinidos usando javascript es simplemente hacer eco de ellos. Si no es así, por favor corrígeme, pero si es así, pensé que sería bueno compartirlo.

Muchas Gracias

preguntado el 22 de mayo de 12 a las 21:05

solo hazles eco. Lo hago todo el tiempo ya que es una variable php, no una js. -

Supongo que eso depende en gran medida del valor de su $_SESSION['thing']. ¿Qué valores esperas que estén allí? -

php es del lado del servidor, javascript es del lado del cliente -

5 Respuestas

No existen las variables de PHP en JavaScript.

Lo que PHP está haciendo es "componer" el texto de salida del JavaScript.

Presiona "Ver código fuente" y mira el texto final que compuso PHP.

Agregando a la respuesta @ Chief17 le dio:

var x_string_val = "<?php echo ((isset($value) AND !empty($value)) ? $value : $default) ?>";
var x_any = <?php echo ((isset($value) AND !empty($value)) ? $value : $default) ?>;
var x_type = typeof(<?php echo ((isset($value) AND !empty($value)) ? $value : $default) ?>);

Asegúrese de generar citas de PHP o citar el valor en javascript si es una cadena. De lo contrario, es probable que cause más errores.

contestado el 22 de mayo de 12 a las 21:05

Lo que estoy tratando de hacer es leer un resultado de una variable de PHP en una condición ternaria para establecer una variable en javascript. Si el PHP está vacío/indefinido, establezca la variable en 0, si no, configúrelo en lo que sea que esté dentro: user1159454

Vaya, eso es mucho para verificar una variable, ¿no? Todavía no entiendo por qué esto no funcionará... == "indefinido") ? alerta("si") : alerta("no"); - user1159454

Si la cosa fuera 4, ¿javascript no lo leería como 4 == "indefinido" (Falso, así que aparece "No")? - user1159454

Y si algo no estuviera definido, PHP lo escribiría como "indefinido" == "indefinido", ¿no es así? - user1159454

Para lograr el resultado indefinido, debe hacer que PHP genere el nombre de una variable que no está definida (no existe) en JavaScript. Cuando digo nombre quiero decir sin comillas inexistente_variable en contraposición a "variable_inexistente" que se interpretaría como una cadena de valor "inexistente_variable". - Mihai Stancu

if(isset($_SESSION['thing'])) {
   echo 'thing is set';
} else {
   echo 'thing is not set';
}

Esta es la forma PHP de comprobar si se ha establecido una variable.

http://uk.php.net/isset

Edit:

Supongo que haría esto si quisiera verificar una variable de PHP en JavaScript:

<?php
echo '<script type="text/javascript">alert("'.(isset($variable) ? $variable : 'Undefined Variable').'");</script>';
?>

El código anterior verifica si la variable está configurada en PHP, si lo está, echoinclúyalo en la declaración de alerta, si no es así, en su lugar se alerta un valor en blanco.

contestado el 22 de mayo de 12 a las 21:05

El código funcionaría, según su objetivo, pero su respuesta no aborda el problema real de que OP no entiende lo que está sucediendo. - GolezTrol

Solo piensa en lo que estaría pasando. PHP se ejecuta en el servidor. El result de la instrucción PHP se inserta en el HTML/JavaScript que se envía al cliente.

Entonces, si su variable de sesión contiene Foo, el resultado sería

alert(typeof Foo);

y

alert(Foo);

Como puede comprender, Foo no está definido en el contexto de su JavaScript del lado del cliente.

contestado el 22 de mayo de 12 a las 21:05

Debe asignar la variable a una variable de javascript. Si observa la fuente HTML después de que su php se haya procesado, probablemente verá algo como:

alert(typeof some value for thing);

lo que sería un error de sintaxis.

Haz esto en su lugar

var thing = "<?php echo $_SESSION['thing']; ?>";
alert( typeof thing );

contestado el 22 de mayo de 12 a las 21:05

Y luego la declaración var thing = some value for thing; fallaría en su lugar. - GolezTrol

@GolezTrol, de hecho, me perdí las comillas alrededor del PHP. Arreglado ahora. - monstruo

alert(typeof <? echo $_SESSION['thing'] ?>);

Esto tiene una mala sintaxis - debería ser alert(typeof(some_variable))

alert(<? echo $_SESSION['thing'] ?>);

esto debería ser como

alert("<?php echo $_SESSION['thing']; ?>");

Y lo que está tratando de hacer no tiene sentido porque ¿cómo se supone que js use variables de diferentes idiomas? oO

contestado el 22 de mayo de 12 a las 21:05

typeof es un operador, no una función, no es una mala sintaxis, es correcta y se permite usarla sin paréntesis. Sin embargo, es una mala práctica y debe usar el paréntesis. - Mihai Stancu

¿Mala práctica no usar paréntesis con un operador? ¿Escribes (1)+(2) también? - GolezTrol

Citar cualquier salida de PHP en cadenas significa que el resultado final siempre sería una cadena. Pero si quieres dar salida 10e19 de PHP, javascript lo reconocerá como una sintaxis numérica perfectamente válida incluso sin las comillas. Con los qootes nunca podría generar una matriz de JavaScript [] o un objeto javascript {} - Mihai Stancu

@GolezTrol Punto tomado troll, sabes que me refiero a una mala práctica en relación con un operador del lado derecho unario que de otro modo podría mezclarse en otras operaciones, por ejemplo tipo de (falso) frente a tipo de falso * 34 (si el * es un remanente accidental de editar cosas durante la depuración. - Mihai Stancu

Y cual es la diferencia, typeof(false) * 34 probablemente significa lo mismo que typeof false * 34. Hacer que parezca una función no significa que el motor JS lo tratará como tal. - GolezTrol

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.