在DOMContentLoaded之后,在jQuery中进行脚本异步调用的正确方法是什么?

时间:2018-01-24 15:49:56

标签: jquery ajax performance

我试图找出重写某些代码的最佳方法。基本上,我们有一些广告,一旦页面加载后通过AJAX加载(不是高优先级,所以我们不希望它持有DOM渲染)。这就是我在Firefox中的网络工具中看到的:

enter image description here

这是当前的代码:

$(document).ready( function() {
    ....
    $.getJSON("/cgi-bin/links/spots_load_new.cgi", {
        catid: category_id,
        linkid: link_id,
        t: temp_set
    }, function(results) {
        showSpots(results);
    });

});

......这是我认为在阅读$.when() - https://api.jquery.com/jquery.when/后我认为可行的方法:

$(document).ready( function() {
    ....   
    $.when(
        $.getJSON("/cgi-bin/links/spots_load_new.cgi", {
                catid: category_id,
            linkid: link_id,
            t: temp_set,
        })
    ).then( function(results)  {
        showSpots(results);
    });
});

但是,项目似乎仍然在 DOMContentReady 之前调用。怎么解决这个问题?

2 个答案:

答案 0 :(得分:2)

您的两个代码完全相同。

您需要使用$(document).ready包装代码,如下所示:

$(document).ready(function(){
    // $.getJSON...
});

答案 1 :(得分:1)

首先,请注意您的问题中的两个代码块是等效的。如果您想在页面中的所有其他内容加载后执行该代码,那么您可以挂钩load的{​​{1}}事件,如下所示:

window