-5

我认为将 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;

?>

您可以在我的服务器上查看实时测试

4

1 回答 1

0

tl;dr:PHP 可以生成 Javascript,但两者不能相互或同步对话。

以下是执行“涉及” php 和 javascript 的请求时发生的情况链的简化视图:

  1. 一个请求被发送到服务器(即用户在他的浏览器中输入你的脚本的 url)
  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 一样。

于 2013-01-13T17:51:29.813 回答