dox*_*guy 1 javascript php scope
我正在尝试混合使用php和javascript,因为我的javascript需要在页面加载时访问一些php变量.我无法理解某些东西,而且我已经编写了一个代码示例.
<?php
session_start();
$test = 100;
$_SESSION['test'] = 200;
?>
<html>
<head>
<title>Test This Out</title>
</head>
<body>
<h1> Testing Javascript and PHP Mixed </h1>
<p>
<?php
echo("The value of \$test is $test and the value of \$_SESSION['test'] is ");
?>
</p>
<p>
<script type="text/javascript">
<?php
session_start();
if(isset($test)) echo("document.write('Non-session variable exists and is $test <br />');");
else echo("document.write('Non-session variable does not exist<br />');");
if(isset($_SESSION['test'])) echo("document.write('Session variable exists <br />');");
else echo("document.write('Session variable does not exist<br />');");
?>
</script>
</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
输出如下:
Testing Javascript and PHP Mixed
The value of $test is 100 and the value of $_SESSION['test'] is
Non-session variable exists and is 100
Session variable exists
Run Code Online (Sandbox Code Playgroud)
所以我试图了解脚本可用的php变量类型.似乎我称之为$ test的变量是可用的,但即使它知道这一点
$_SESSION['test']
Run Code Online (Sandbox Code Playgroud)
存在,如果我尝试输出这个值(以完全相同的方式输出
$test
Run Code Online (Sandbox Code Playgroud)
变量),整个系统挂起.
我的问题是:1.javascript中使用的php可以"看到"我之前在页面中定义的变量吗?我为什么试图打印出来
$_SESSION['test']
Run Code Online (Sandbox Code Playgroud)
变量让整个事情崩溃(什么都没有渲染)?是第二个
session_start(),
Run Code Online (Sandbox Code Playgroud)
脚本中的那个,有必要吗?
谢谢你的帮助.
PHP在服务器上运行,Javascript在客户端上运行.它们具有完全不同的执行环境,并且在完全不同的时间执行.PHP变量具有PHP的变量范围,而JS规则不能进入游戏,因为PHP没有在"JS环境"中执行.这不可能.
你可以让PHP GENERATE JS代码/变量,但这些变量没有得到处理/执行/由JS引擎验证,直到后的页面已经由PHP生成和发送到客户端浏览器.
您还可以将JS"发送"变量发送到PHP,但这是通过AJAX调用完成的,并且JS再次在客户端浏览器中运行,并且PHP在Web服务器上运行.就PHP而言,AJAX调用只是一个常规的HTTP请求,当响应返回到浏览器中运行的JS时,它就像来自服务器的任何其他HTTP响应一样.
您的第二个session_start()将失败 - 必须在服务器生成任何输出之前启动会话,因为会话ID令牌作为常规HTTP cookie发送到客户端浏览器.每当脚本产生任何输出时,PHP都会自动发送完整的HTTP标头,并且在执行第二个session_start()之前输出HTML页面的开头和一些JS代码.
如果您有这样的事情:
<script type="text/javascript">
var jsvar = <?php echo $phpvar; ?>;
</script>
Run Code Online (Sandbox Code Playgroud)
就PHP引擎而言,这是完全有效的PHP代码,它将输出当时的任何内容$phpvar.但请记住 - PHP正在服务器上运行 - PHP引擎不知道您将该变量输出到的环境中.它不知道它在javascript块中,它只知道它应该输出变量的内容.如果在那时没有定义$ phpvar,那么你实际上会产生:
var jsvar = ;
Run Code Online (Sandbox Code Playgroud)
这是一个语法错误.确保您使用PHP生成有效的JAVASCRIPT code.l 完全取决于您