在IE中异步加载jQuery会导致错误 - 但$ .ajax()仍会运行

时间:2011-09-22 12:42:33

标签: javascript jquery internet-explorer asynchronous

情景:

我有一些JS代码,我想检测DOM中是否存在jQuery,如果没有添加它:

if (typeof jQuery != 'function') {
    var sc = document.createElement('script');
    sc.type = 'text/javascript';
    sc.async = true;
    sc.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js";
    sc.onload = function() { App.getTrackers(); };
    sc.onreadystatechange = function() { App.getTrackers(); };

    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(sc, s);
}
else {
    App.getTrackers();
}

App = {
    getTrackers: function() {
        $.ajax({url: "/ajax.php", success: function(data) { console.log(data) }});
    }
}

onload()适用于FF + Webkit; onReadyStateChange()用于IE

问题出在IE上,我收到了这个错误:

'$' is undefined

不过! IE的控制台返回ajax.php的内容。所以jQuery函数已经被执行......不知何故。即使$未定义......

$还不存在吗?即使已经下载了脚本,它还没有被编译吗?

1 个答案:

答案 0 :(得分:0)

就绪状态具有除complete之外的其他值,因此将在不同阶段触发事件,直到代码加载并完成。

检查事件处理程序中的状态:

sc.onreadystatechange = function() {
  if (sc.readyState === 'complete') {
    App.getTrackers();
  }
};