2013-01-11 47 views
-5

我認爲將JavaScript變量傳遞給PHP,反之亦然是不可能的,因爲PHP是服務器端,JavaScript是客戶端。這不是如何將PHP值傳遞給JS,反之亦然?

然後我看到一個網站說這是可能的,我試了一下。原來,這是可能的,顯然 ...請參閱下面的代碼示例:

如果我不能傳遞變量,爲什麼它的工作?我做錯了什麼?

代碼示例

<?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; 

?> 

你可以check a live test on on my server

+2

我不認爲解析是這裏發生了什麼。 –

+4

您正在使用PHP在發送給客戶端之前修改JavaScript代碼。這不同於將一種語言的價值傳遞給另一種語言。 – JLRishe

+0

@羅伯特哈維我猜他的意思是「傳球」。 – JLRishe

回答

0

tl; dr:PHP可以生成Javascript,但兩者不能相互或同步交談。

  1. 的請求在你的腳本的URL發送到服務器(即用戶類型:

    這裏當一個請求「涉及」 PHP和JavaScript的執行是在發生的事情鏈中的一個簡化的外觀在他的瀏覽器中)

  2. 服務器完全處理您的php腳本並吐出瀏覽器輸出:html或許是javascript。
  3. 用戶瀏覽器(客戶端)獲取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一樣,這很有意義。

相關問題