jQuery $.getScript()方法的用法

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

语法:

$.getScript(url, fn)

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

表 1:$.getScript() 方法的两个参数
参数 说明
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 所示。

点击div元素后的效果
图 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

(0)
上一篇 2021年7月20日
下一篇 2021年7月20日

相关推荐

发表回复

登录后才能评论