JavaScript:如何判断第三方异步内容加载何时完成?

时间:2014-09-17 12:06:57

标签: javascript dom asynchronous

我将RecruiterBox帐户中的工作机会整合到一个风格化程度很高的公司网站中,我需要挂钩点击事件以添加其他功能和动画。一旦内容加载,我就可以这样做。

我面临的挑战是如何确定作业列表何时完成加载,因为它是由第三方脚本异步加载的。

用于加载工作机会的JS代码段首先在DOM中添加几个<script>标记,以便在第三方JS中加载。然后执行JSON数据的异步加载,通过Mustache模板将其呈现到DOM中。

我可以通过向父元素添加'DOMSubtreeModified'事件侦听器来检测DOM何时被操作,但我无法检测到DOM操作何时完成。

我也知道获取JSON的GET的URL所以我的问题变成了我可以添加一些形式的监听器来告诉我这个GET操作何时完成?这甚至可能吗?


修改

该调用是一个Ajax调用,但由于它在第三方加载的脚本中,我无法控制它。也许更好的问题是我可以为给定URL的http响应挂钩或添加事件监听器,无论脚本是我的还是第三方?

这里是RecruiterBox脚本的摘录,如果它有帮助,它会拨打电话:

var loadOpenings = function(oid, callbacks) {
            var url, source;
            url = API_HOST + (oid == 'all'  ? '/widget/clientid/openings/'.replace("clientid",CLIENT_ID)
                                            : '/widget/clientid/opening/openingid/'.replace("openingid",oid).replace("clientid",CLIENT_ID) );

            _rbox.xhr.request({
                url: url,
                method: 'GET'
            }, function(data) {
                data = JSON.parse(data.data);

                var i, len, ret;
                if(oid == 'all') {

                    for(i=0, len=data.length; i<len; i++) {
                        updateOpeningFields(data[i]);
                    }
                    ret = openings;
                }
                else {
                    updateOpeningFields(data);
                    ret = openings.get( oid );
                }
                callbacks.success && callbacks.success(ret);
            }, function(e) {
                callbacks.error && callbacks.error(e);
            });
        };

以下两个要点列出了第三方脚本加载器加载的完整脚本。上面的函数位于rbox_api.js中。注意:为了安全起见,我在此脚本中对id和公司信息进行了模糊处理。

https://gist.github.com/jujudigital/d63efbad3032ec4ddd3d#file-rbox_impl-js https://gist.github.com/jujudigital/2aa852a35eedd3c2ce3a#file-rbox_api-js

0 个答案:

没有答案