我在w3schools上读到有几种方法可以执行外部脚本:
1.如果存在异步:脚本与页面的其余部分异步执行(脚本将在页面继续解析的同时执行)
1.如果异步不存在而延迟存在:当页面完成解析时,将执行该脚本
1.如果异步或延迟都不存在:在浏览器继续分析页面之前,脚本将立即被提取和执行。
所以,如果我理解正确的话,既然我在html文件的head部分有下面的脚本,而没有使用async或defer,那么它应该首先被执行,然后浏览器将继续解析。
<script type="text/javascript" src="js/display.js"></script>
display.js
$.ajax({
url:"fetch_items.php"
});
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"]
是不是设置尚未所以这内容doesnot显现.(如果我重新载入这页这内容将显现正确)
为什么会发生这种情况?我怎样才能确保脚本在主体加载之前已经完成了它的执行?下面是指脚本:如果异步或延迟都不存在:在浏览器继续分析页面之前,脚本将立即被提取和执行。
3条答案
按热度按时间xggvc2p61#
AJAX 代表“Asynchronous JavaScript and XML”。所以它通过运行你的javascript代码从你的浏览器发出异步请求。你当前的代码从浏览器向服务器发出请求。然后服务器使用你的PHP代码将你的数组保存到会话中,而不是重新加载页面。这就是为什么你的数组不能立即打印的原因。
**错误的解决方案:**正在刷新 AJAX 请求成功方法的页面。
**更好的解决方案:**如果没有必要的话,就不要在会话中保存数组。在“fetch_items. php”的方法中返回数组。然后使用 AJAX 请求的成功回调函数打印数组。
下面是success和print方法的用法示例:Ajax response inside a div
有关更多信息,请阅读jquery API文档:http://api.jquery.com/jquery.ajax/
x0fgdtte2#
试着把
async : false
放到 AJAX 调用参数中。eit6fx6z3#
这是因为异步调用。我遇到了类似的问题,并通过在
AJAX
中添加async:false
修复了它。您可以看到下面我使用的代码片段。