我在w3schools中读到有几种方法可以执行外部脚本:
所以,如果我理解正确,因为我的html文件的head部分中有以下脚本 不使用异步或延迟它应首先执行,然后浏览器将继续解析。
<script type="text/javascript" src="js/display.js"></script>
display.js
$.ajax({
url:"fetch_items.php"
});
fetch_items.php从数据库中提取一些项目并将它们放在数组$_SESSION("my_array")
中。
因此,在html文件夹的body部分中,我使用驻留在$_SESSION("my_array")
中的值来显示一些内容。
<?php
if(isset($_SESSION["my_array"]))
{
?>
<!-- html code echoing values from session -->
<?php
}
?>
但$_SESSION["my_array"]
尚未设置,因此内容不会显示。 (如果我重新加载页面,内容将正确显示)
为什么会这样?如何确保脚本在正文加载之前完成了它的执行?以下仅涉及脚本: 如果不存在异步或延迟:在浏览器继续解析页面之前,将立即获取并执行脚本。
答案 0 :(得分:1)
AJAX代表“异步JavaScript和XML”。因此,它通过运行您的javascript代码从您的浏览器发出异步请求。您当前的代码从浏览器向服务器发出请求。然后,服务器使用您的PHP代码将您的阵列保存到会话,而不是重新加载页面。这就是你的阵列不能立即打印的原因。
错误的解决方案:刷新您的ajax请求的成功方法页面。
更好的解决方案:如果没有必要,请不要将阵列保持在会话中。在“fetch_items.php”的方法中返回数组。然后使用ajax请求的成功回调打印数组。
以下是使用成功和打印方法的示例:Ajax response inside a div
有关更多信息,请阅读jquery api文档:http://api.jquery.com/jquery.ajax/
答案 1 :(得分:0)
尝试将async : false
放入ajax调用参数中。