Javascript运行和DOM加载

Javascript运行和DOM加载,javascript,ajax,dom,Javascript,Ajax,Dom,以下代码是.php文件的一部分。另一个php文件ribbon.php使用json格式通过ajax调用返回数据。每当我运行这段代码时,一切都正常。然而,results\u ribbon实际上并不存在于这个特定的代码点中。当然,由于ajax调用是异步的,所以代码不会等待ajax完成,而是继续进行随后的DOM加载。当函数callit到达事件队列时,results\u ribbon已经存在,因此没有问题 ... <script type="text/javascript">

以下代码是.php文件的一部分。另一个php文件ribbon.php使用json格式通过ajax调用返回数据。每当我运行这段代码时,一切都正常。然而,results\u ribbon实际上并不存在于这个特定的代码点中。当然,由于ajax调用是异步的,所以代码不会等待ajax完成,而是继续进行随后的DOM加载。当函数callit到达事件队列时,results\u ribbon已经存在,因此没有问题

...   
 <script type="text/javascript">  
          $.ajax({
            method:"POST",
            dataType: 'json',
            url:"ribbon.php",
            success: function callit(data) {
                if (data === "nothing")          
                   return;
                $("#results_ribbon").text(data); 
            }   
          });
</script>       
...
<div id="results_ribbon"></div>
 ...
。。。
$.ajax({
方法:“张贴”,
数据类型:“json”,
url:“ribbon.php”,
成功:函数callit(数据){
如果(数据==“无”)
返回;
$(“#结果"功能区”)。文本(数据);
}   
});
...
...
然而,为了深入了解这是如何工作的,我对上述代码做了如下更改:

<script type="text/javascript">  
              $.ajax({
                method:"POST",
                dataType: 'json',
                url:"ribbon.php",
                success: function callit(data) {
                    if (data === "nothing")          
                       return;
                    $("#results_ribbon").text(data); 
                }   
              });
    var ms = 5000 + new Date().getTime();
       while (new Date() < ms)
         {}
    </script>     

$.ajax({
方法:“张贴”,
数据类型:“json”,
url:“ribbon.php”,
成功:函数callit(数据){
如果(数据==“无”)
返回;
$(“#结果"功能区”)。文本(数据);
}   
});
var ms=5000+新日期().getTime();
while(新日期()
这样,我就有时间完成ajax调用,我认为事件循环会优先于DOM调用callit,因此结果将是未知的。然而,我的想法只适用于Chrome;在Mozilla和IE中,一切都像第一个案例一样运行!我无法推断出

有人能向我解释一下或指出一些阅读资料来源,当Javascript代码在同一个文件中共存时,它们是如何干扰DOM加载的?哪一个具有优先权?浏览器是否可以以并行方式同时加载这两个文件


谢谢你

JS是单线程的,我认为所有进程都在排队,直到while循环中断(异步代码也是如此)。您可以通过记录while循环完成的时间和实际调用ajax回调的时间来检查它,它将在while日志之后几毫秒,由于初始DOM加载是在异步调用之前启动的同步进程,因此该元素是可用的,这是有意义的。我们开始加载DOM,然后使用AJAX和循环编写JS代码,然后继续DOM渲染的其余部分,最后可以运行任何异步操作。我不相信会有任何特殊的优先级。JS是单线程的,我认为所有进程都会排队,直到while循环中断(异步代码也是如此)。您可以通过记录while循环完成的时间和实际调用ajax回调的时间来检查它,它将在while日志之后几毫秒,由于初始DOM加载是在异步调用之前启动的同步进程,因此该元素是可用的,这是有意义的。我们开始加载DOM,然后使用AJAX和循环编写JS代码,然后继续DOM渲染的其余部分,最后可以运行任何异步操作。我不相信有任何特别的优先权。