【发布时间】:2018-07-29 05:38:42
【问题描述】:
我在 w3schools 中读到有几种方法可以执行外部脚本:
- 如果存在异步:脚本与页面的其余部分异步执行(脚本将在页面继续解析时执行)
- 如果 async 不存在而 defer 存在:脚本在页面完成解析后执行
- 如果 async 或 defer 都不存在:在浏览器继续解析页面之前立即获取并执行脚本。
所以,如果我理解正确,因为我的 html 文件的头部有以下脚本 不使用 async 或 defer 应该首先执行它,然后浏览器将继续解析。
<script type="text/javascript" src="js/display.js"></script>
display.js
$.ajax({
url:"fetch_items.php"
});
fetch_items.php 从数据库中获取一些项目并将它们放入数组$_SESSION("my_array")。
所以在 html 文件夹的正文部分,我使用位于 $_SESSION("my_array") 中的值来显示一些内容。
<?php
if(isset($_SESSION["my_array"]))
{
?>
<!-- html code echoing values from session -->
<?php
}
?>
但$_SESSION["my_array"] 尚未设置,因此内容不会出现。 (如果我重新加载页面内容将正确显示)
为什么会这样?我如何确保脚本在正文加载之前完成了它的执行?以下仅指脚本: 如果 async 或 defer 都不存在:在浏览器继续解析页面之前立即获取并执行脚本。
【问题讨论】:
-
你可能在输出你正在输出的任何内容后填充 SESSION
-
发生这种情况是因为 php 代码在您的 js 脚本之前运行。您可以做的是使用 ajax 从 php 获取内容,而不是尝试将其设置为 session。 ajax 完成请求后,您可以使用 DOM 或 jquery 更新您的页面
-
$.ajax({是异步的 - 因此,在发送请求之前加载整个页面 -
这是一个很好的例子,说明如何使用 ajax 从 php 获取内容:w3schools.com/js/js_json_php.asp
-
我不知道 php 先运行。 Marcel Kohls 这就是我正在做的事情......然后我会将数据附加到特定的 div,一切都会好起来的。但是后来我也想通过单击按钮以各种方式重新排序项目,尽管在会话中将它们放在数组中会非常方便。
标签: javascript php html ajax dom