Muchas veces en este sitio veo personas tratando de hacer cosas como esta:
<script type="text/javascript">
$(document).ready(function(){
$('<?php echo $divID ?>').click(funtion(){
alert('do something');
});
});
</script>
No creo que este sea algún tipo de patrón en el que las personas caigan naturalmente. Debe haber algún tipo de tutorial o material de aprendizaje que muestre esto, de lo contrario no lo veríamos tanto. Lo que pregunto es: ¿estoy haciendo un gran problema o es una práctica realmente mala?
EDITAR: Estaba hablando con un amigo mío sobre esto, que a menudo pone rubí en su JavaScript y mencionó este punto.
¿Está bien colocar dinámicamente constantes de aplicación amplia en su JavaScript para que no tenga que editar dos archivos? por ejemplo...
MYAPP.constants = <php echo json_encode($constants) ?>;
también está bien codificar directamente los datos que planea usar en una biblioteca
ChartLibrary.datapoints = <php echo json_encode($chartData) ?>;
o deberíamos hacer una llamada AJAX cada vez?
php
javascript
web-development
Greg Guida
fuente
fuente
this question will likely solicit opinion, debate, arguments, polling, or extended discussion.
...Respuestas:
Por lo general, es una mala práctica usar el lenguaje X para generar código en el lenguaje Y.
Intente desacoplar los dos idiomas haciendo de los datos su única interfaz, no mezcle el código .
En su ejemplo, podría mejorar el código utilizando PHP para completar una
cfg
estructura que está disponible para JavaScript:De esta manera, PHP solo se preocupa por poblar la estructura de datos y JavaScript solo se preocupa por consumir la estructura de datos.
Este desacoplamiento también abre el camino para cargar los datos de forma asincrónica (JSON) en el futuro.
Actualizar:
Para responder las preguntas adicionales que hizo con su actualización, sí, sería una buena práctica aplicar el principio DRY y dejar que PHP y JavaScript compartan el mismo objeto de configuración:
No hay ningún daño en insertar la representación JSON de su configuración directamente en su página de esta manera. No necesariamente tiene que buscarlo a través de XHR.
fuente
data-
atributo en su HTML. Algo así como<body data-cfg="{...}">
.JavaScript generado dinámicamente es una práctica horrible y mala.
Lo que se supone que debes hacer es comprender lo que significa Separación de preocupaciones y Mejora progresiva.
Esto básicamente significa que tiene HTML dinámico y JavaScript estático (que mejora el HTML).
En su caso, probablemente desee una clase en su div y selecciónela con un selector de clase
fuente
El mayor problema con su fragmento es que le falta el
#
para convertirlo en un selector jQuery válido;).Yo diría que debería intentar evitar incluir PHP en su JavaScript cuando sea posible. ¿Qué hay de malo en cambiar el selector en su
click()
controlador a una clase y agregar la clase al elemento en cuestión si desea que se active el controlador y no si no lo hace;No hay circunstancias en las que hay que incluir en su PHP JavaScript; pero debo admitir que estos son pocos y distantes entre sí.
Un ejemplo es cuando tienes diferentes entornos; prueba, puesta en escena y en vivo. Cada uno de ellos tiene una ubicación diferente de sus activos (imágenes, principalmente). La forma más fácil de establecer la ruta para que JavaScript pueda usarla es algo así como;
fuente
#
=) pero en serio estoy de acuerdo en que su ejemplo es la mejor manera de hacerlo. Me parece más natural hacerlo de esa manera también. Entonces, ¿por qué lo vemos tan a menudo en lugares donde no es necesario?$divID = '#' . $element_id_value;
- sin problemas con el jefe de selección;)Esta es una mala práctica en mi opinión, ya que necesitaría llamar a este archivo algo.php y luego no podría comprimirlo, por ejemplo, sin mencionar que no está bien mezclar las cosas de su servidor con su JavaScript. Intente limitar la mezcla entre PHP y JS tanto como sea posible.
Siempre puedes hacer esto en su lugar:
Y luego podría llamar a esta función en un archivo php, para que estas mezclas sean lo más pequeñas posible.
Al hacer esto (tener archivos JS más grandes, no 2-3 líneas donde no importa), puede aprovechar la compresión del archivo JS y los desarrolladores front-end se sienten mucho más cómodos trabajando solo con JavaScript en mi opinión (como podría escribir) Python, Ruby, etc., no solo PHP, y el código podría hacerse más y más grande dependiendo de lo que necesite hacer allí).
fuente
No creo que esta sea una mala práctica. Si la identificación requerida en su JavaScript es dinámica, no hay otra forma de hacerlo.
fuente
Consideraría esta mala práctica. Al colocar contenido dinámico dentro de bloques de script, siempre debe tener en cuenta el hecho de que escapar dentro de un contexto de JavaScript no es tan simple como cabría esperar. Si los valores eran proporcionada por el usuario, es no suficiente para html-escapar de ellos.
La hoja de trucos OWASP XSS tiene más detalles, pero básicamente debes adoptar este patrón:
Luego, en un archivo .js separado vinculado desde su html principal, cargue este código:
La razón para usar un archivo .js separado es doble:
fuente
$.ajax
o similarAlgunas personas argumentan que es una mala práctica. No porque sea PHP dentro de JS, sino porque es JS en línea y, por lo tanto, el navegador no lo almacenará en caché para facilitar la carga la próxima vez.
En mi opinión, siempre es mejor usar JSON para pasar variables entre los 2 idiomas, pero supongo que depende de usted.
fuente
Yo diría que en general no lo hagas. Sin embargo, si desea pasar datos de PHP -> Javascript, no me parecería una locura tener un bloque Javascript en línea donde tenga el código de la forma que se muestra a continuación. Aquí el código solo pasa datos de php a javascript, no crea lógica sobre la marcha o similares. La buena parte de hacer esto frente a una llamada ajax es que los datos están disponibles tan pronto como se carga la página y no requieren un viaje adicional al servidor.
Por supuesto, otra opción es construir un archivo de configuración de JavaScript desde PHP a través de alguna forma de script de compilación que lo colocará en un archivo .js.
fuente
Lo único que puedo pensar que realmente puede causar problemas es cuando los errores de PHP están configurados para mostrarse y, por lo tanto, empuja una carga de HTML que muestra el error de PHP en su JavaScript.
También porque está en el script, por lo tanto, no se muestra y, a veces, puede tomar un tiempo darse cuenta de por qué su script está roto.
fuente
Depende de quién, y si me preguntas, sí, lo considero práctica por varias razones. En primer lugar, preferiría tener código javascript en su propio archivo JS que el analizador de php no podría tocar.
En segundo lugar, php se ejecuta solo en el momento del servidor, por lo que si depende de alguna variable en php para cambiar su javascript, puede que no funcione muy bien. Si hay alguna configuración de carga de página que desea controlar con javascript, generalmente prefiero agregar ese valor al DOM con php para que javascript pueda alcanzarlo cuando y si lo desea (en un div oculto, por ejemplo).
Finalmente, solo para fines organizativos, esto puede ser muy molesto. Es lo suficientemente malo mezclar html y php (en mi opinión).
fuente
Contener el PHP en un
config
objeto de datos va el 90% del camino, pero la mejor práctica es separarlo por completo. Puede usar una API RESTful para solicitar solo los datos que necesita, es un poco más javascript pero con algunas ventajas.Desventajas:
Guión
fuente
No es una mala práctica SOLO si se usa para la inicialización del código javascript (en mis temas de WordPress, inicializo mis objetos javascript con funciones php como site_url () porque es la única forma de manejar eso (tal vez podríamos usar una solicitud ajax para obtener un json, y así ... pero es un dolor en el culo).
Buena práctica:
nuevo javascriptObject ("");Mala práctica:
/ * algún código * / document.get_element_by_id (); / * algún código * /fuente