2012-01-31 21 views
14

Me pregunto si es posible usar un archivo JS externo que contenga código PHP.Usar el código PHP en el archivo Javascript externo

mi JS externo

$(document).ready(function(){ 

    $('#update').click(function(){ 
    var tableVal={}; 
    // a bit of php code I need in JS 
    var search_city=<?php echo $_SESSION['search_city'];?>'; 
$.post('<?=base_url()?>/project_detail/pub', {'tableVal':tableVal},function(message) 

     }) 
    }) 
}) 

mi página de vista

<script type="text/javascript" src="<?= base_url();?>js/external.js"></script> 

El JS no funciona como supongo que el código PHP en JS es el problema. ¿Alguna idea? Muchas gracias.

+2

El preprocesador no va a analizar el archivo a menos que el archivo termina en una extensión que se asigna al tipo de contenido correcto, o que informe a su servidor web PHP que debe manejar las peticiones de archivos que terminan en Js –

+2

En otras palabras, cambiar "external.js" a "external.php". –

Respuesta

20

puede hacerlo por cualquiera que cambiar el nombre de archivo a jsphp y usando este enlace en script etiqueta src (como se señaló en otras respuestas)

Si bien esto puede parecer una manera buena y fácil, hay muchas razones para no hacerlo.

  • almacenamiento en caché (la secuencia de comandos generada no se almacenan en caché, esto puede ser cambiado, pero requiere trabajo adicional)
  • El consumo de memoria (cada petición a esto generó js archivo requerirá php)

Puede simplemente cambiado a algo como esto para lograr que se haga (de una manera mejor, la OMI):

<script type="text/javascript"> 
    var Settings = { 
    base_url: '<?= base_url() ?>', 
    search_city: '<?= $_SESSION['search_city'] ?>' 
    } 
</script> 
<script type="text/javascript" src="<?= base_url();?>js/external.js"></script> 

que el contenido de su js se convirtió en algo como esto:

$(document).ready(function(){ 
    // I assume that not using search_city in your sample code 
    // and some syntax errors, is just by mistake... 
    $('#update').click(function(){ 
    var tableVal={search_city:Settings.search_city}; 
    $.post(Settings.base_url+'/project_detail/pub', 
    {'tableVal':tableVal}, 
    function(message){ 
     console.log(message); 
    }) 
    }) 
}) 
+0

Gracias. Creo que tu respuesta es buena para mí. +1 – FlyingCat

+0

¿Qué ocurre si uso include ('external.js.php')? – FlyingCat

+0

Que su 'js' estará en línea y procesado. Tendrás que rodearlo con la etiqueta 'script' y estará bien –

2

bastante común que desee hacer, simplemente cambie el nombre de su archivo js a "external.js.php" (yo uso ese método, pero mientras termine en php, no importa lo que use realmente) entonces simplemente cambie la url de src en las etiquetas de su script y listo.

No olvide que puede necesitar incluir funciones y archivos de configuración en el javascript para que la función base_url() funcione.

1

Creo que es posible, pero como Brian mencionó, debe dejar que el preprocesador sepa que necesita procesarlo. Puede cualquiera que lo utilice php para manejar ficheros .js (no recomendado) o simplemente utilizar un archivo .php para su Javascript, a continuación, utilizar:

<script type="text/javascript" src="<?= base_url();?>js/external.php"></script> 

Esto debería estar bien porque el tipo MIME es todavía tan Javascript será interpretado de esa manera. Nunca he probado esto, así que es una suposición, pero creo que debería funcionar.

2

A menos que necesite php para muchas cosas en su archivo js, ​​le sugiero que no haga lo mencionado anteriormente y no cambie el nombre de su archivo js a php para que lo analice. Los archivos JS se sirven mejor como estáticos.

Una cosa que puede hacer es tener una secuencia de comandos en la parte superior de su documento php, donde se asigna la variable de base_url como global para ser utilizado por todos sus JS:

En su página, antes de incluir cualquier js

<script type="text/javascript">var base_url = "<?= base_url();?>";</script> 
<script type="text/javascript" src="<?= base_url();?>js/external.js"></script> 

en sus js presentar

$(document).ready(function(){ 

    $('#update').click(function(){ 
    var tableVal={}; 
    // a bit of php code I need in JS 
    var search_city=<?php echo $_SESSION['search_city'];?>'; 
    $.post(base_url+'/project_detail/pub', {'tableVal':tableVal},function(message) 

     }) 
    }) 
}) 
+0

Todavía hay un código 'php' en su' js';) –

+0

gracias por la ayuda. Como dijo Juicy. Todavía hay código php en el archivo js. +1 sin embargo. – FlyingCat

+0

de acuerdo. esta es una buena manera sin perder ningún rendimiento. declarando variables con valores php y luego usar esas variables en archivos js –

0

Sólo una idea rápida, que podría ayudar a algunas personas:

creo (no tratado) hay también una manera de pedir al servidor web (Apache, etc.) a deje que los archivos JS se manejen como contenido PHP.

Ventajas:

  • No hay necesidad de cambiar el nombre de archivos JS a .js.php
  • se aprovecha de almacenamiento en caché
  • sólo se puede aplicar a una carpeta específica (no a todos los archivos JS de su sitio web)

Retira:

  • No olvide que esos archivos "php" están "en caché" en alguna parte, por lo que no debe confiar en el hecho de que los archivos se generan cada vez.
  • Recursos del servidor: como se dice en otras respuestas, asegúrese de usar ese truco solo cuando no sea posible poner el código PHP fuera de los archivos JS (usando consultas jajax, por ejemplo), o en archivos que no se cargan el servidor demasiado.
Cuestiones relacionadas