在身体加载

时间:2018-02-19 01:33:16

标签: javascript php html ajax dom

我在w3schools中读到有几种方法可以执行外部脚本:

  1. 如果存在异步:脚本与页面的其余部分异步执行(脚本将在页面继续解析时执行)
  2. 如果async不存在且存在延迟:脚本在页面解析完成后执行
  3. 如果不存在异步或延迟:在浏览器继续解析页面之前,将立即获取并执行脚本。
  4. 所以,如果我理解正确,因为我的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"]尚未设置,因此内容不会显示。 (如果我重新加载页面,内容将正确显示)

    为什么会这样?如何确保脚本在正文加载之前完成了它的执行?以下仅涉及脚本: 如果不存在异步或延迟:在浏览器继续解析页面之前,将立即获取并执行脚本。

2 个答案:

答案 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调用参数中。