2016-03-05 18 views
-1

我有以下脚本,完美的作品。不出所料加载js的作品不同于硬编码

<script type="text/javascript"> 
$(document).ready(function() { 
     php_test(); 
}); 
</script>  

<script type="text/javascript"> 
function php_test() { 
    alert('<?php echo(DIR); ?>myfile'); 
} 
</script> 

输出:

http://localhost/mvc_framework/myfile 

当我把函数php_test在一个文件中可以说“php_test.js”,并将其绑定到我的页脚它执行与此输出:

<?php echo(DIR); ?>myfile 

任何解释?我很困惑...

+1

说明?了解PHP何时运行。 –

+0

php在此页面上运行。所以会产生output1。 – ratmalwer

+0

php不在js文件中编译...它运行在php文件中 – charlietfl

回答

1

你问这个问题的方式使它感到困惑。通过一些Apache调整,可以让PHP在服务器上的所有类型的文件上运行。我的解决方案将使您的JS文件由PHP解释器处理。

如果您使用的是Apache,您需要做的是创建一个.htaccess文件。我会假设你是。然后你添加下面这行代码:

AddType application/x-httpd-php .php .js 

上面的代码将强制PHP解释器运行在命令中列出的所有格式。如果您需要PHP在服务器端对这些文件执行某些操作,您还可以添加.htm或甚至.css文件。

参考这个问题这里以前解决类似的问题>Using .htaccess to make all .html pages to run as .php files?


或者你可以存储一大堆从PHP结束变量的页面,如JavaScript的变量,比如从一个这个例子上我的项目:

 <script type="text/javascript"> 
      var trackFilterFlag = null; 
      <?php 
       echo "trackFilterFlag = \"". $displayedPageType ."\";\r\n"; 
      ?> 

      var trackFilterCategory = null; 
      <?php 

       if(strcmp($displayedPageType, "mood") === 0 || strcmp($displayedPageType, "genre") === 0) { 
        echo "trackFilterCategory = \"". $filterCategory ."\";\r\n"; 
       } 

      ?> 

      var sortingTracksBy = null; 
      <?php 
       if(isset($chosenSortFlag) && strlen($chosenSortFlag) > 3 && !($defaultSort)) { 
        echo "sortingTracksBy = \"". $chosenSortFlag ."\";\r\n"; 
       } 
      ?> 

     </script> 

当然我还是一个新手,当我写的代码,它可能使其更加简洁,也将让PHP呼应了整个事情,但你明白我的意思:)

+0

但是这会减慢性能吗?糟糕呢? – ratmalwer

+0

我将我的函数调用改为php_test('<?php echo(DIR);?>');我认为现在表现更好,我对这个主题了解得更多。 – ratmalwer

+0

嗯,这工作。好吧,从理论上讲,是的,它会稍微减慢性能,但说实话可以忽略不计。想象一下,你的单个.php页面加载了5个JS文件,那么是的,PHP预编译器/解释器将只运行6次,而不是仅为.php文件的1次。但是,在事情的宏伟计划中,这不会严重降低性能,这是对HTACCESS文件的合法使用,PHP开发人员已经知道有很多网站已经动态创建.js和.js文件。用于各种目的的css文件:) – Aaron