如何在另一个JS文件中引用jquery.js?

12

我想在myjs.js文件中包含jquery.js。我为此编写了下面的代码。

  var theNewScript=document.createElement("script");
  theNewScript.type="text/javascript";
  theNewScript.src="http://example.com/jquery.js";
  document.getElementsByTagName("head")[0].appendChild(theNewScript);
  $.get(myfile.php);

第5行出现了一个错误,显示为“$未定义”。我想在myjs.js文件中包含jquery.js,然后调用$.get()函数。我该怎么做?请帮忙。


你为什么要在页面外使用 $.get()? - Calum
我假设你的本意是 $.get("myfile.php"); 而不是 $.get(myfile.php); - Salman A
可能是重复的问题:检查jQuery是否已加载,如果未加载则加载它 - Ciro Santilli OurBigBook.com
4个回答

12

在程序中动态向文档头部添加脚本标签并不意味着这个脚本会立即可用。您应该等待浏览器下载、解析和执行该文件。一些浏览器为脚本触发一个onload事件,您可以在其中挂钩您的逻辑。但这不是跨浏览器的解决方案。我更愿意像这样“轮询”特定的符号是否可用:

var theNewScript = document.createElement("script");
theNewScript.type = "text/javascript";
theNewScript.src = "http://example.com/jquery.js";
document.getElementsByTagName("head")[0].appendChild(theNewScript);
// jQuery MAY OR MAY NOT be loaded at this stage
var waitForLoad = function () {
    if (typeof jQuery != "undefined") {
        $.get("myfile.php");
    } else {
        window.setTimeout(waitForLoad, 1000);
    }
};
window.setTimeout(waitForLoad, 1000);

哪些浏览器不支持onload事件?即使在像IE 7这样的旧浏览器中,它也可以正常工作。 - Christophe
1
我已经阅读过(但没有亲自确认)onload事件对于Gecko、Opera等脚本标签有效,而对于IE,您需要挂钩onreadystatechange。请参见http://unixpapa.com/js/dyna.html和http://blog.lexspoon.org/2009/12/detecting-download-failures-with-script.html。 - Salman A
确实,调用事件处理程序的方式因浏览器而异。我在现代浏览器中使用addEventListener,在旧版IE中则使用attachEvent,效果很好。 - Christophe

4
问题在于脚本无法立即加载,需要一些时间将脚本文件下载到您的页面并执行(在jQuery中定义$的情况下)。
我建议您使用HeadJS。然后您可以这样做:
head.js("/path/to/jQuery.js", function() {
   $.get('myfile.php');
});

0
简单的回答,不要这样做。jQuery文件对于入侵者来说非常敏感,所以不要尝试。将其他文件合并到jQuery文件中通常会在JS控制台中引起错误,而且只有在文件加载到主文档中后,jQuery才会初始化。
抱歉,刚才误解了你的意思。
试试这个:
var s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = 'http://domain.com/jquery.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(s);

0

我以前用过这段代码,它可以工作:

var t=document;
var o=t.createElement('script');
o=t.standardCreateElement('script');
o.setAttribute('type','text/javascript');
o.setAttribute('src','http://www.example.com/js/jquery-1.3.2.js');
t.lastChild.firstChild.appendChild(o);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接