我可以在没有回调的情况下使用jquery getScript()吗?

时间:2011-11-06 09:34:54

标签: jquery getscript

我需要在另一个js文件中使用外部js文件中的javascript函数。这基本上就是我尝试过的代码:

$.getScript('js/myHelperFile.js');
myHelperFunction();

这不起作用 - 我收到“myHelperFunction未定义”的错误。

但是,此代码有效:

$.getScript('js/myHelperFile.js', function(){myHelperFunction();});

我特别希望能够以第一种方式完成 - 将文件加载到我的文件顶部,然后使用我需要的任何函数。这是可能的,还是我误解了getScript是如何工作的?

3 个答案:

答案 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,你的第一个工作正常,我经常这样做。