2013-01-11 89 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一样,这很有意义。