我需要在另一个js文件中使用外部js文件中的javascript函数。这基本上就是我尝试过的代码:
$.getScript('js/myHelperFile.js');
myHelperFunction();
这不起作用 - 我收到“myHelperFunction未定义”的错误。
但是,此代码有效:
$.getScript('js/myHelperFile.js', function(){myHelperFunction();});
我特别希望能够以第一种方式完成 - 将文件加载到我的文件顶部,然后使用我需要的任何函数。这是可能的,还是我误解了getScript是如何工作的?
答案 0 :(得分:2)
单独使用getScript()
功能,我认为你不能。问题是使用AJAX加载脚本(事实上,getScript
只是特殊$.ajax()
函数的简写),当浏览器尝试在下一行执行函数时,也许是服务器尚未返回文件。
如果您不想使用回调函数,则需要以原始形式使用jQuery $.ajax()
函数(并忘记getScript()
),并将传输设置为同步即可。这样,您可以确保在继续执行代码之前加载脚本:
$.ajax({
url: url,
dataType: "script",
async: false
});
答案 1 :(得分:2)
$。getScript,默认情况下,所有与HTTP OP相关的jQuery函数都是非阻塞调用。也就是说,操作完成时代码不会挂起。这意味着上面的代码肯定会失败,因为$ .getScript无法在尝试执行该方法的行运行之前加载脚本。这就是回调函数被接受为参数的原因。
然而,您正在尝试做的事情是可能的。加载脚本后,您应该可以从任何地方调用它。在脚本下载之前避免调用该方法所需的一切就是设置必要的标志。
var HelperFileLoaded = false;
$.getScript('js/myHelperFile.js', function() { HelperFileLoaded = true; });
// ...
function btnSaveClick() {
if(!HelperFileLoaded) return;
myHelperFunction();
}
BenM的建议是可能的,但除非您只调用myHelperFunction,否则它将无法作为解决方案,因为在触发调用myHelperFunction的任何其他方法之前,无法保证脚本已经下载。 / p>
答案 2 :(得分:0)
如果你使用JSONP,你的第一个工作正常,我经常这样做。