2011-07-01 30 views
2

基本上,問題是這樣的:傳遞PHP變量非本地JavaScript

<?php $test="foobar"; ?> 

如果HTML文檔中我稱之爲

<script type="text/javascript">alert("<?php echo $test; ?>")</script>

,一切都很好。

但是,如果我做同樣的事情外部JS文件中包含

<script type="text/javascript" src="foo.js"></script> 

這是行不通的。

有沒有辦法做到這一點?

回答

0

在第一種情況下,您實際上將值傳遞給PHP腳本,其中<?php echo $test; ?>由PHP解析器解析並替換爲值爲$test的PHP變量。

在第二種情況下,您只需將'<?php echo $test; ?>'字符串包含到JS文件中並且不會進行分析。

我的建議是:按照您現在傳遞的方式傳遞此值,但從外部JS文件中正確引用它。例如,你可以調用JS文件中定義的一些函數,從PHP文件傳遞參數。

還有一個醜陋的做法,比如讓你的服務器把JS文件當作PHP文件,但我不推薦它。

一些示例:

如果包括在你的PHP文件:

<script type="text/javascript" src="foo.js"></script> 
<script type="text/javascript">myHappyFunction("<?php echo $test; ?>")</script> 

,並在您的JS文件(foo.js):

(function(){ 
    var myHappyFunction = function(myParameter){ 
     alert(myParameter); 
    }; 
    window['myHappyFunction'] = myHappyFunction; // pass outside scope 
})(); 

你應該看到$test值在腳本執行時被警告(假設我沒有犯這個錯誤;))。

0

你可以嘗試這樣的事情:

http://www.javascriptkit.com/javatutors/externalphp.shtml

外部文件沒有成爲一個.js擴展。或者,您可以將.js文件關聯爲apache中的PHP文件(或您正在運行的任何Web服務器)。將您的JS文件保存爲.php文件可能是最簡單的,但請記住它不會與渲染頁面的腳本共享相同的變量。

0

如果你想在JavaScript文件中處理PHP,你有幾個選擇。在典型的Apache安裝程序中,具有諸如.php.php3.php5的擴展名的PHP文件在配置文件中被明確定義,允許它們被PHP解析。默認情況下,Apache不會將JavaScript和其他文件(如圖像)視爲PHP文件。如果Apache做到了這一點,性能將會下降。所以這裏是我們可以做的...


選項A

選項A將所有的JavaScript文件作爲PHP文件,所以任何PHP將被處理,而輸出的JavaScript的瀏覽器。您需要在開頭添加一個header()調用,以確保瀏覽器知道它的JavaScript文件。

的httpd.conf

AddType application/x-httpd-php .js 


選項B

選項B,您可以在您的Apache配置文件(S)代碼添加到路由所有JS請求到一個PHP文件進行處理。在這個選項中,scripts.php文件將處理$ _REQUEST ['src']變量,並獲取相應的JS文件。

的.htaccess(未測試,但這樣的事情應該工作):

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(*\.js)$ scripts.php?src=$1 [L,QSA] 
</IfModule>