这怎么不把PHP值传给JS,反之亦然?

时间:2013-01-11 20:33:25

标签: php javascript variables

我认为将JavaScript变量传递给PHP反之亦然,因为PHP是服务器端而JavaScript是客户端。

然后我看到一个网站说这是可能的,我试过了。事实证明,显然是 ...请参阅下面的代码示例:

如果我无法传递变量,为什么会有效?我做错了什么?

代码示例

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

1 个答案:

答案 0 :(得分:0)

tl; dr :PHP可以生成Javascript,但两者无法相互或同步通话。

以下简要介绍了执行“涉及”php和javascript的请求时会发生什么情况的链接:

  1. 将请求发送到服务器(即用户在浏览器中键入脚本的URL)
  2. 服务器完全处理你的php脚本并吐出浏览器输出:html和javascript。
  3. 用户浏览器(客户端)获取html,在用户屏幕中呈现它,并运行页面的javascript(如果有的话)。
  4. 每个步骤只在前一个步骤完成后才会发生,这意味着当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一样,这是有道理的。