2011-11-06 122 views
1

我试图混合PHP和JavaScript,因为我的JavaScript需要访问一些PHP变量页面加载时。我无法理解某些东西,并且我已经编写了一个代码示例。PHP与Java语言 - 什么是PHP变量的<script></script>标签内的范围是什么?

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

输出的样子:

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 

所以我想了解什么类型的PHP变量的可用于脚本。看来,我已经叫$测试变量是可用的,但即使它知道

$_SESSION['test'] 

存在,如果我尝试输出该值(以完全相同的方式我输出的

$test 

变量),整个系统挂起。

我的问题是:1。 可以在JavaScript中使用PHP的“看”的变量,我定义在页面早些时候? 2.为什么我试图打印

$_SESSION['test'] 

变量使整个事情崩溃(在所有被渲染什么)? 3.已经是第二

session_start(), 

了一个脚本,有必要吗?

感谢您的任何帮助。

+1

我看到你已经得到了一些相当详细/技术答案在这里。如果你在你的教育阶段,所有你需要明白的是,php在javascript之前运行(你需要知道的是php在服务器上运行,而javascript在浏览器中运行)。但是,就立即应用这些知识而言,javascript可以使用PHP设置或计算的数据,但PHP不能使用由javascript创建的数据。得到它? – Marlin

回答

5

PHP运行在服务器上和Javascript运行在客户端上。他们有完全不同的执行环境,并在完全不同的时间执行。 PHP变量具有PHP的变量范围,并且JS规则不能进入游戏,因为PHP并未在“JS环境”中执行。这不可能。

你可以让PHP GENERATE JS代码/变量,但这些变量没有得到处理/执行/直到的页面已经由PHP生成和发送到客户端浏览器JS引擎验证。

你也可以有JS“发送”变量PHP,但那是通过Ajax调用完成,并再次,在JS运行在客户端浏览器,和PHP运行在Web服务器。 Ajax调用只是一个普通的HTTP请求就PHP而言,当一个响应返回给JS在浏览器中运行,它就像从服务器的任何其他HTTP响应。

您的第二个session_start()将失败 - 会话ID必须作为常规HTTP cookie发送到客户端浏览器,否则必须在服务器生成任何输出之前启动会话。只要脚本产生任何输出,PHP就会自动发送完整的HTTP头,并且在第二个session_start()被执行之前,您已经输出了HTML页面的开始和一些JS代码。

如果你有这样的事情:

<script type="text/javascript"> 
var jsvar = <?php echo $phpvar; ?>; 
</script> 

至于PHP引擎而言,这是完全合法的PHP代码,它会输出中任何的$phpvar内容是在这一点上。但请记住 - PHP正在服务器上运行 - PHP引擎完全不知道您输出该变量的环境。它不知道它在JavaScript块内,它只知道它应该输出一个变量的内容。如果$ phpvar没有定义在这一点上,你实际上会生产:

var jsvar = ; 

这是一个语法错误。这完全取决于你确保您使用PHP来产生有效JAVASCRIPT code.l

0

的代码,因为你现在是procedural,这意味着它将从1号线运行,直到EOF按顺序,B/C你没有进行任何自定义函数调用等。

你不需要第二个session_start(),第一个足够初始化会话。

尝试var转储会话变量时,从未听说过系统挂起。也许尝试这种格式(单引号,而不是双引号):

echo('The value of $test is ' . $test . ' and the value of $_SESSION[test] is ' . $_SESSION['test']);