为什么要调用$ .getScript而不是直接使用<script>标记?

Too*_*awe 7 javascript jquery script-tag getscript

我不明白替换这个的原因:

<script src="js/example.js"></script>
Run Code Online (Sandbox Code Playgroud)

有了这个:

$.getScript('js/example.js', function() {
  alert('Load was performed.');
});
Run Code Online (Sandbox Code Playgroud)

有没有特别的理由使用jQuery版本?

T.J*_*der 8

我能想到的唯一原因是你在加载脚本时得到了回调.但是你也可以script通过使用load事件(或者在真正的旧IE上onreadystatechange)使用标签来获得回调.

相比之下,这样做有几个负面因素,尤其getScript是受同源策略约束,而script标签则不然.

即使您需要动态加载脚本(并且有几个原因可能需要这样做),坦白说除非您确实需要回调,否则我会说您最好通过添加script标记来加载脚本:

$('head:first').append("<script type='text/javascript' src='js/examplejs'><\/script>");
Run Code Online (Sandbox Code Playgroud)

(注意:您需要\在上面的结束标记中使用否则不必要,以避免过早结束此代码存在的脚本标记,如果它在内联脚本标记中.)

script以这种方式添加的标签是受制于同源策略.如果你想要load回调,那么:

$("<script type='text/javascript' src='js/examplejs'><\/script>")
    .on("load", function() {
        // loaded
    })
    .appendTo('head:first');
Run Code Online (Sandbox Code Playgroud)

(正如我所说,对于非常古老的IE,你必须做更多的事情,但这些天你不需要处理它们.)


cdh*_*wie 6

我可以想到你可能使用jQuery表单的三个原因:

  1. 您希望所有脚本声明都位于文档的顶部,但您也知道放置脚本声明会强制浏览器完全下载它们,然后再继续进行页面呈现过程.这可能会引入可测量的延迟.jQuery表单将调度脚本加载直到文档下载完成后,类似于将所有<script>标记放在文档末尾的效果,只是没有语法怪异.
  2. <script>机制不适用于不在HTML文档本身中的脚本; 也就是说,如果页面上包含<script>要加载脚本的脚本,则除了使用基于JavaScript的方法(例如调用jQuery函数)之外别无选择.
  3. jQuery表单允许以提供的回调函数的形式通知脚本的成功执行.


Gab*_*oli 0

没必要这么做..

如果您想动态加载脚本(在需要时,而不是从头开始),则可以这样做