$.getScript()
方法通过 Ajax 请求获取并运行一个外部 JavaScript 文件。$.getScript()
是一个用于动态加载 JavaScript 的方法。当网站需要加载大量 JavaScript 时,动态加载 JavaScript 就是一个比较好的方法。当需要某个功能时,再将相应的 JavaScript 加载进来。
语法:
$.getScript(url, fn)
$.getScript() 方法有两个参数,如表 1 所示。
参数 | 说明 |
---|---|
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>
默认情况下,预览效果如图 1 所示。
图 1:默认效果
我们点击【加载】按钮后,可以看到控制台输出信息如图 2 所示。
图 2:控制台输出信息
一开始控制台是没有内容输出的,当我们点击【加载】按钮后,才会尝试加载 test.js 这个文件。小伙伴们可能就会问了:“在 head 标签中使用 script 标签也可以引入外部 JavaScript 文件,与使用$.getScript()
方法加载外部 JavaScript 文件有什么不同吗?”
相对传统的加载方式,$.getScript()
方法有以下两个优点:
- 异步跨域加载 JavaScript 文件;
- 可避免提前加载 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>
默认情况下,预览效果如图 3 所示。
图 3:默认效果
我们点击 div 元素后,此时预览效果如图 4 所示。
图 4:点击 div 元素后的效果
jQuery 本身有一个缺陷,就是使用 animate() 方法会无法识别 background-color、border-color 等颜色属性。因此,我们还需要引入第三方插件 jquery.color.js 来修复这个 bug。对于这一点,我们在“自定义动画”这一节中已经详细介绍过了。
上面这个例子就是使用 script 标签来引入 jquery.color.js 插件的,这种方式在页面一打开的时候就会立即加载 JavaScript 文件。像这种插件性的东西,大多数时候我们都是希望在要用到它的时候才去加载,所以可以使用$.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>
解惑
每次执行该功能的时候都会去请求一次这个 JavaScript 文件,这样不是在帮倒忙吗?
其实$.getScript()
方法是对 ajax() 方法的一个封装,可以使用 ajax() 方法的缓存来将 http 的状态从 200 改变成 304,从而使用客户端的缓存。
$.ajaxSetup({ cache:true })
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/23906.html