在 jQuery 中,我们可以使用$.getScript()方法通过 Ajax 请求获取并运行一个外部 JavaScript 文件。$.getScript()是一个用于动态加载 JavaScript 的方法。当网站需要加载大量 JavaScript 时,动态加载 JavaScript 就是一个比较好的方法。当需要某个功能时,再将相应的 JavaScript 加载进来。
语法:
$.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 所示。
我们点击【加载】按钮后,可以看到控制台输出信息如图 2 所示。
一开始控制台是没有内容输出的,当我们点击【加载】按钮后,才会尝试加载 test.js 这个文件。小伙伴们可能就会问了:“在 head 标签中使用 script 标签也可以引入外部 JavaScript 文件,与使用$.getScript()方法加载外部 JavaScript 文件有什么不同吗?”
相对传统的加载方式,$.getScript()方法有以下两个优点:
对于上面的第 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 所示。
我们点击 div 元素后,此时预览效果如图 4 所示。
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
})