2011-11-06 151 views
1

我試圖混合PHP和JavaScript,因爲我的JavaScript需要訪問一些PHP變量頁面加載時。我無法理解某些東西,並且我已經編寫了一個代碼示例。PHP與Java語言 - 什麼是PHP變量的<script></script>標籤內的範圍是什麼?

<?php 
session_start(); 
$test = 100; 
$_SESSION['test'] = 200; 
?> 
<html> 
<head> 
<title>Test This Out</title> 
</head> 
<body> 
<h1> Testing Javascript and PHP Mixed </h1> 
<p> 
<?php 
echo("The value of \$test is $test and the value of \$_SESSION['test'] is "); 
?> 
</p> 
<p> 
<script type="text/javascript"> 
<?php 
session_start(); 
if(isset($test)) echo("document.write('Non-session variable exists and is $test <br />');"); 
else echo("document.write('Non-session variable does not exist<br />');"); 
if(isset($_SESSION['test'])) echo("document.write('Session variable exists <br />');"); 
else echo("document.write('Session variable does not exist<br />');"); 
?> 
</script> 
</p> 
</body> 
</html> 

輸出的樣子:

Testing Javascript and PHP Mixed 

The value of $test is 100 and the value of $_SESSION['test'] is 

Non-session variable exists and is 100 
Session variable exists 

所以我想了解什麼類型的PHP變量的可用於腳本。看來,我已經叫$測試變量是可用的,但即使它知道

$_SESSION['test'] 

存在,如果我嘗試輸出該值(以完全相同的方式我輸出的

$test 

變量),整個系統掛起。

我的問題是:1。 可以在JavaScript中使用PHP的「看」的變量,我定義在頁面早些時候? 2.爲什麼我試圖打印

$_SESSION['test'] 

變量使整個事情崩潰(在所有被渲染什麼)? 3.已經是第二

session_start(), 

了一個腳本,有必要嗎?

感謝您的任何幫助。

+1

我看到你已經得到了一些相當詳細/技術答案在這裏。如果你在你的教育階段,所有你需要明白的是,php在javascript之前運行(你需要知道的是php在服務器上運行,而javascript在瀏覽器中運行)。但是,就立即應用這些知識而言,javascript可以使用PHP設置或計算的數據,但PHP不能使用由javascript創建的數據。得到它? – Marlin

回答

5

PHP運行在服務器上和Javascript運行在客戶端上。他們有完全不同的執行環境,並在完全不同的時間執行。 PHP變量具有PHP的變量範圍,並且JS規則不能進入遊戲,因爲PHP並未在「JS環境」中執行。這不可能。

你可以讓PHP GENERATE JS代碼/變量,但這些變量沒有得到處理/執行/直到的頁面已經由PHP生成和發送到客戶端瀏覽器JS引擎驗證。

你也可以有JS「發送」變量PHP,但那是通過Ajax調用完成,並再次,在JS運行在客戶端瀏覽器,和PHP運行在Web服務器。 Ajax調用只是一個普通的HTTP請求就PHP而言,當一個響應返回給JS在瀏覽器中運行,它就像從服務器的任何其他HTTP響應。

您的第二個session_start()將失敗 - 會話ID必須作爲常規HTTP cookie發送到客戶端瀏覽器,否則必須在服務器生成任何輸出之前啓動會話。只要腳本產生任何輸出,PHP就會自動發送完整的HTTP頭,並且在第二個session_start()被執行之前,您已經輸出了HTML頁面的開始和一些JS代碼。

如果你有這樣的事情:

<script type="text/javascript"> 
var jsvar = <?php echo $phpvar; ?>; 
</script> 

至於PHP引擎而言,這是完全合法的PHP代碼,它會輸出中任何的$phpvar內容是在這一點上。但請記住 - PHP正在服務器上運行 - PHP引擎完全不知道您輸出該變量的環境。它不知道它在JavaScript塊內,它只知道它應該輸出一個變量的內容。如果$ phpvar沒有定義在這一點上,你實際上會生產:

var jsvar = ; 

這是一個語法錯誤。這完全取決於你確保您使用PHP來產生有效JAVASCRIPT code.l

0

的代碼,因爲你現在是procedural,這意味着它將從1號線運行,直到EOF按順序,B/C你沒有進行任何自定義函數調用等。

你不需要第二個session_start(),第一個足夠初始化會話。

嘗試var轉儲會話變量時,從未聽說過系統掛起。也許嘗試這種格式(單引號,而不是雙引號):

echo('The value of $test is ' . $test . ' and the value of $_SESSION[test] is ' . $_SESSION['test']);