在jQuery中,我们可以使用.getScript()方法通过AJAX来获取并运行一个外部JavaScript文件。.getScript()是一个用于动态加载JavaScript的方法。当网站需要加载大量JavaScript时,动态加载JavaScript就是一个比较好的方法。当需要某个功能时再将相应的JavaScript加载进来。

语法:

$.getScript(url, fn)

说明:

$.getScript()方法有3个参数,如下表所示。

$.getScript()的3个参数
参数 说明
url 必选参数,表示被加载的JavaScript文件路径
fn 可选参数,表示请求成功后的回调函数

首先我们需要准备一个JavaScript文件,代码如下:

console.log("从0到1系列图书");

举例:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function(){ $("#btn").click(function(){ $.getScript("js/test.js") }) }) </script> </head> <body> <input id="btn" type="button" value="加载"/> </body> </html>

默认情况下,预览效果如下图所示。

当我们点击【加载】按钮后,可以看到控制台输出结果如下图所示。

分析:

一开始控制台是没有内容输出的,当我们点击【加载】按钮后,才会尝试加载test.js这个文件。可能大家就会问了:“在head标签中使用script标签也可以引入外部JavaScript文件,跟使用$.getScript()加载外部JavaScript文件有什么不同吗?”

相对传统的加载方式,$.getScript()有以下两个优点。

  • (1)异步跨域加载JavaScript文件。
  • (2)可避免提前加载JavaScript文件,只有需要的时候才会去加载。这样可以减少服务器和客户端的负担,加快页面加载速度。

对于上面的第2点,我们可以看一个非常有用的例子,请看下面的代码。

举例:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <style type="text/css"> div { width:50px; height:50px; background-color:lightskyblue; } </style> <script src="js/jquery-1.12.4.min.js"></script> <script src="js/jquery.color.js"></script> <script> $(function () { $("div").click(function () { $(this).animate({ "width": "150px", "height": "150px" , "background-color": "red" }, 1000); }) }) </script> </head> <body> <div></div> </body> </html>

默认情况下,预览效果如下图所示。

当我们点击div元素后,此时预览效果如下图所示。

分析:

jQuery本身有一个缺陷,就是使用animate()方法会无法识别background-color、border-color等颜色属性。因此,我们还需要引入第三方插件jquery.color.js来修复这个bug。对于这一点,我们在“8.5 自定义动画”这一节中已经详细介绍过了。

上面这个例子就是使用script标签来引入jquery.color.js的,这种方式会在页面一打开的时候就会立即加载。像这种插件性的东西,大多数时候我们都是希望在要用到它的时候才会去加载,此时就可以使用$.getScript()方法来优化了,优化后的代码如下:

!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <style type="text/css"> div { width:50px; height:50px; background-color:lightskyblue; } </style> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function () { $("div").click(function () { $.getScript("js/jquery.color.js"); $(this).animate({ "width": "150px", "height": "150px" , "background-color": "red" }, 1000); }) }) </script> </head> <body> <div></div> </body> </html>

常见问题:

1.每次执行该功能的时候都会去请求一次这个JavaScript文件,这样不是在帮倒忙吗?

其实$.getScript()是对ajax()方法的一个封装,可以使用ajax()方法的缓存来将http的状态从200改变成304,从而使用客户端的缓存。

$.ajaxSetup({ cache:true })