<?php
//Started or resumed the session
?>
<html>
<head>
<script type="text/javascript" src="myjavascript.js"></script>
</head>
<body>
<div class="myClass" data-attr=<?php echo $_SESSION["mySession"]?>></div>
</body>
</html>
这是我的php。
在我的js文件中,我有一些像
$(function(){
alert($(".myClass").attr("data-attr"));
});
返回正确的值。我不明白执行的顺序。因为头部分在前面,然后是div[myclass
]。因此,计算在稍后的时间点进行。
是否因为我将代码包围在domready
内而产生回声?这是原因吗?它会一直有效吗?
PHP在运行任何JavaScript之前在服务器上运行。首先执行PHP,然后执行JavaScript。接下来的$(function(){ ... });
意味着运行JavaScript一旦DOM完成加载,所以alert($(".myClass").attr("data-attr"));
只发生在DOM加载后,这就是为什么它会正常工作。
PHP由接收请求的服务器执行和呈现。浏览器在接收到
内容后执行Javascript。 <?php
//Started or resumed the session
//Not visible to the browser
echo "Something";
?>
<html>
<head>
<script type="text/javascript" src="myjavascript.js"></script>
</head>
<body>
<div class="myClass" data-attr=<?php echo $_SESSION["mySession"]?>></div>
</body>
</html>
解析后,浏览器接收到如下内容:
something
<html>
<head>
<script type="text/javascript" src="myjavascript.js"></script>
</head>
<body>
<div class="myClass" data-attr="whateverisinthesession"></div>
</body>
</html>
之后,它将执行javascript。
TL;DR:首先执行php,然后执行javascript
会正常工作的!但只是因为你用$(function()){}
(简称为$( document ).ready()
)包围了JS代码,否则浏览器可能会尝试先执行你的JS代码,甚至在页面完全加载之前。请记住,PHP总是在浏览器加载HTML页面之前执行,PHP已经在服务器端