2011-07-15 88 views
0
<html> 
<head> 
<?php 

     $bldg_number=-1; 
?> 
         <script language="javascript" type="text/javascript"> 
         var bldg=<?php echo $bldg_number; ?> 
         if(bldg < 0) 
          { 
          alert("me"); 
          } 
         else 
          { 
          alert("hi"); 
          } 
        </script> 

我期待的輸出與消息的警告我,但是有當我運行此頁無輸出,請告訴我,爲什麼PHP變量的值不傳遞給javscript可變我如何分配PHP變量的值,以JavaScript變量

+0

本頁提供* *是正在通過PHP解釋器中運行,所有的看起來比你應該在你的'var'語句的末尾有一個分號未成年人挑剔罰款等( JavaScript解釋器會自動爲你插入一個)。所以你必須引用更多的頁面和/或描述更多的上下文,問題在於別處。 –

+0

沒有任何輸出表明可能存在語法錯誤;檢查由PHP代碼生成的源代碼,並查看該腳本實際上最終看起來像什麼。 –

+0

@ Thief:好吧,*現在* @Jaspreet肯定有他能接受的答案。 ;-) –

回答

3

你的代碼需要在var行的末尾分號(繼續閱讀爲什麼):

<script language="javascript" type="text/javascript"> 
         //    here --------------v 
         var bldg=<?php echo $bldg_number; ?>; 
         if(bldg < 0) 
          { 
          alert("me"); 
          } 
         else 
          { 
          alert("hi"); 
          } 
        </script> 

的JavaScript有一個名爲「Automatic Semicolon Insertion」的功能,通常會使該錯誤無害(功能是否是無害的,是另一回事),但不幸的是PHP由於ASI僅在有缺失分號應該出現的換行符時纔開始運行, PHP eats the linebreak following the ?> tag

... PHP碰到?>結束標記時,它只是開始輸出任何它認爲(除了緊隨其後的換行符 - 見instruction separation

那麼,什麼實際獲取輸出到您的頁面是:

var bldg=-1 if(bldg < 0) 

......這是JavaScript中的語法錯誤。添加分號修復它,因爲那麼輸出是:

var bldg=-1; if(bldg < 0) 

...這是有效的。

+0

剛剛嘗試過FF,我得到一個「失蹤」;錯誤。 –

+0

T.J Crowder,添加分號作品,沒有分號不起作用。我認爲大多數瀏覽器不支持自動分號插入。 Chrome的工作原理相同。 –

+0

好吧,明白了。無論如何,上述代碼的問題是缺失的斷裂線。我不想討論這個我不會推薦給任何人的功能。我剛剛提出瞭解決問題的辦法。 –