$.getScript 第二次工作

$.getScript works second time around?

本文关键字:工作 第二次 getScript      更新时间:2023-09-26

我想知道这是否是jQuery $.getScript()的常见问题?我有一个使用此功能的 JS 脚本。

我的JS文件真的很长,我认为发布整个脚本对我来说不是一个好主意,所以我只是好奇这是否是一个常见问题?

我有一个$.ajax功能,按下按钮后运行

$.ajax({
   url: thisURL,
   type: "POST",
   crossDomain:true,
   data: searliziedData
}).done(function(data){
var jsPaths = ["http://www.example.com/js/jquery.jscrollpane.min.js","http://www.example.com/js/jquery.hoverIntent.minified.js","http://www.example.com/js/jquery.mousewheel.js","http://www.example.com/js/image_contents.js"];
$.each(jsPaths, function(i, jsPath) {
    $.getScript(jsPath);
});
   // do something
});

因此,在我第二次按下按钮之前,脚本不会插入到站点中。我还尝试在$.ajax之前插入$.getScript代码,直到第二次按下它才执行。

我从这段代码中没有得到任何错误或任何内容。

我还在 $.each() 函数中放入了一个alert("test")并执行。

您可能会问我怎么知道我的脚本没有被执行?我使用谷歌浏览器的检查元素,在资源下,我可以看到站点中正在执行的脚本。

每次我在清除缓存后getScript()无法在第一个页面加载上工作(或者如果它只在第一次加载时有效)时,都是因为我有一些乱七八糟的东西。

我将在这里过于简化:上次遇到这种情况时,我正在检查 <body> 元素是否具有特定的类,但我是在 <body> 标签本身之前调用脚本的。 在第一次加载时,getScript()不会执行,但在第二次加载时,它会执行,因为文档已缓存。 在这种情况下,问题不是特定于getScript(),而是缓存的工作方式。

另一个常见问题是脚本依赖关系,以这个为例:

$.getScript('plugin.js');
$.getScript('developers.js');

如果developers.js依赖于plugin.js中的插件功能之类的东西,在某些情况下,它很可能developers.js无法运行,因为它的下载速度比plugin.js快,因此首先执行。

对此的解决方案如下所示:

$.getScript('plugin.js').done(function(){
    $.getScript('developers.js');
});

您说您的JS文件非常大,并询问这是否是一个常见问题。 我会说是的。当您有很多事情要做时,很容易忽略脚本相对于彼此和 HTML 文档的执行顺序。 这是一个问题,你只需要调试以查看是否缺少任何依赖项。