html 在主体加载之前完成 AJAX 调用

khbbv19g  于 2022-12-16  发布在  其他
关注(0)|答案(3)|浏览(182)

我在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显现.(如果我重新载入这页这内容将显现正确)
为什么会发生这种情况?我怎样才能确保脚本在主体加载之前已经完成了它的执行?下面是指脚本:如果异步或延迟都不存在:在浏览器继续分析页面之前,脚本将立即被提取和执行。

xggvc2p6

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/

x0fgdtte

x0fgdtte2#

试着把async : false放到 AJAX 调用参数中。

eit6fx6z

eit6fx6z3#

这是因为异步调用。我遇到了类似的问题,并通过在AJAX中添加async:false修复了它。您可以看到下面我使用的代码片段。

$.ajax({
        type: "GET",
        url: "fetch_items.php",
        data: {},
        async : false, // make it false
        success: function (html) {
            alert (html);
        }, error: function (error) {
            alert (error);
        }
    });

相关问题