tl; dr:PHP可以生成Javascript,但兩者不能相互或同步交談。
- 的請求在你的腳本的URL發送到服務器(即用戶類型:
這裏當一個請求「涉及」 PHP和JavaScript的執行是在發生的事情鏈中的一個簡化的外觀在他的瀏覽器中)
- 服務器完全處理您的php腳本並吐出瀏覽器輸出:html或許是javascript。
- 用戶瀏覽器(客戶端)獲取html,在用戶屏幕上呈現它,並且如果有的話運行頁面的JavaScript。
每一步都發生在上一個完成之後,這意味着當javascript正在執行時PHP已經不存在了; JavaScript無法調用在PHP中聲明的函數。然而,在這裏要實現的重要一點是,第3步依賴於第2步,也就是說,就像最終的html取決於PHP決定輸出的內容一樣,javascript也是如此。換句話說,PHP可以動態生成JavaScript,而這正是問題代碼中發生的情況。
但是讓我們從更實際的角度來看待它。讓我們通過請求:
步驟1
請求被髮送到服務器。下面的代碼以供執行檢索到:
<?php
$var1 = 300;
echo $var1.'echo_via_php...<br />'; //so far so good
?>
<script type="text/javascript">
document.write('PHP to JS -> <br />') ;
var x = '<?php echo $var1; ?>';
document.write('doc_write_java_X: <br />') ;
document.write(x) ;
document.write(' (if = 300 its okay...i guess)<br />') ;
var php_y = '50' ;
</script>
</div>
<div>
<?php
echo '<br /><br />now js to PHP...';
/////////////////also works java to php...
$var2 = "<script>document.write(php_y)</script>";
echo 'VAR2 is equal php_y: '.$var2;
?>
步驟2
PHP被處理並且被生成並且發送到客戶端的以下輸出。
300echo_via_php...<br />
<script type="text/javascript">
document.write('PHP to JS -> <br />') ;
var x = '300';
document.write('doc_write_java_X: <br />') ;
document.write(x) ;
document.write(' (if = 300 its okay...i guess)<br />') ;
var php_y = '50' ;
</script>
</div>
<div>
<br /><br />now js to PHP...
<script>document.write(php_y)</script>
VAR2 is equal php_y: <script>document.write(php_y)</script>
步驟3
用戶瀏覽器收集服務器輸出,並運行的JavaScript,得到:
300echo_via_php...<br />
<script type="text/javascript">
document.write('PHP to JS -> <br />') ;
var x = '300';
document.write('doc_write_java_X: <br />') ;
document.write(x) ;
document.write(' (if = 300 its okay...i guess)<br />') ;
var php_y = '50' ;
</script>
PHP to JS -> <br />
doc_write_java_X: <br />
300
(if = 300 its okay...i guess)<br />
</div>
<div>
<br /><br />now js to PHP...
<script>document.write(php_y)</script>
50
VAR2 is equal php_y: <script>document.write(php_y)</script>
50
的例子並不誠然最容易跟隨因爲我用原始問題中的代碼,但希望能夠說明這一點:PHP只是生成稍後將由客戶端讀取的輸出。一種語言生成另一種語言的代碼可能會讓人困惑,但當您將javascript看作文本時,就像html一樣,這很有意義。
我不認爲解析是這裏發生了什麼。 –
您正在使用PHP在發送給客戶端之前修改JavaScript代碼。這不同於將一種語言的價值傳遞給另一種語言。 – JLRishe
@羅伯特哈維我猜他的意思是「傳球」。 – JLRishe