jQuery在底部,等待执行脚本,直到它被加载

时间:2012-02-09 01:55:57

标签: javascript jquery html ajax

我在SO中看到了类似的问题,有人想做同样的事情。不同的情况是我有这个轻量级脚本,它监听事件冒泡到文档根目录的顶部,我故意想把它放在页面的顶部,我不想把它包装在$(document).ready()中。它看起来像这样:

<html>
<head>
    <script>
        document.documentElement.onclick = function (e) {
        //$.ajax call using jQuery. Possible that jQuery is not loaded when page is not completely loaded
        }
    </script>
</head>

然后在页面底部附近我包含jQuery:

<body>
    <script src="./jQuery.js"></script>
</body>
</html>

正如您在<head>上看到的那样,当我使用$.ajax对某个地方进行ajax调用时,jQuery可能尚未加载,因此它可能会抛出$ is undefined error当有人点击DOM上的某些内容时,jQuery尚未加载。我的解决方法可能是使用settimeout希望稍后加载jquery并且代码工作如下:

if (typeof $ === 'undefined'){
  setTimeout(doAJAXJquery, 50);
}else{
  $.ajax(//blablabla) //jQuery loaded and ready to use!!
}

但这是一个非常肮脏的黑客。我怎么知道jQuery何时完成加载? 50ms我放在那里只有我自己组成的任意值。当然,如果jquery尚未加载并且已经过了50ms,它仍然无法工作。

有没有更好的解决方法,所以当jQuery未定义时,它会在稍后的某个时间重试,或者在jQuery准备就绪后执行ajax执行ajax的函数?感谢。

2 个答案:

答案 0 :(得分:1)

怎么样

<head>
<script type="text/javascript">
var init = function(){
    document.documentElement.onclick = function (e) {
    //$.ajax call using jQuery. Possible that jQuery is not loaded when page is not completely loaded
    }
}
</script>
</head>
<body>
<script src="./jQuery.js"></script>
<script type="text/javascript">
init();
</script>
</body>

答案 1 :(得分:1)

如果你想执行等待jQuery加载的函数列表(或者'kick'事件),你可以创建自己的'ready'函数:))

var runList = new Array(), timer = setInterval(function(){
  if (typeof(jQuery) != 'undefined')
  {
     clearInterval(timer);
     if (runList.length>0)  for(var i in runList) runList[i]();  
  }
}, 50);

runList.push(function(){alert(1);});
runList.push(function(){alert(2);});

var jQuery = 1;