使用 jQuery 加载脚本后无法使用 javascript 函数

Cannot use javascript function after script loaded using jQuery

我正在尝试以编程方式加载本地 javascript 文件 - papaparse library,然后使用其功能之一:

$.getScript("./Content/Scripts/papaparse.js", function () {
    console.log("Papaparse loaded successfully");
    Papa.parse(file, { skipEmptyLines: true, header: false, complete: completeCallback });
});

脚本加载成功,但是调用parse方法报错:

ReferenceError: Papa is not defined

papaparse库中,Papa定义如下:

(function (global) {
    "use strict";

    var Papa = {};
    Papa.parse = someFunction;
    .
    .
    global.Papa = Papa;
}

如果有帮助,整个代码都是从 typescript 文件中调用的。
我做错了什么?

根据https://api.jquery.com/jquery.getscript/

The callback is fired once the script has been loaded but not necessarily executed.

您可能需要使用 setTimeout(300, function(){...}) 来等待它执行。

正如卡斯特罗在他的回答中指出的那样 that according to offical documentation of Jquery's getScript

The callback of getScript method is fired once the script has been loaded but not necessarily executed.

这意味着当调用 getScript 的回调函数时,目标脚本仅在当前页面上下文中加载 未完全执行 因此您需要提供一些JavaScript 引擎执行该脚本的时间。 你怎么能给那个时间。嗯,其中一个选项是 setTimeout/setInterval

您可以在 getScript 的回调函数中使用 setTimeout/setInterval

您的代码的修改版本如下所示:-

$.getScript("./Content/Scripts/papaparse.js", function () {
    console.log("Papaparse loaded successfully");
    function dealWithPapa() {
       Papa.parse(file, { skipEmptyLines: true, header: false, complete: completeCallback });
    }
    //regularly check after 100ms whether Papa is loaded or not
    var interval = setInterval(function() {
        if(Papa !== undefined) {
            //once we have reference to Papa clear this interval
            clearInterval(interval);
            dealWithPapa();
        }       
    },100);

});

希望这能消除您的疑虑。