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

Cannot use javascript function after script loaded using jQuery

本文关键字:javascript 函数 jQuery 加载 脚本 使用      更新时间:2023-09-26

我正在尝试以编程方式加载本地javascript文件- papaparse库,然后使用它的一个函数:

$.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文件中调用整个代码。
我做错了什么?

正如Castro在他的回答中指出的,根据Jquery的getScript的官方文档

getScript方法的回调被触发,一旦脚本已经加载,但不一定执行。

这意味着当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);
});
我希望这能消除你的疑虑。

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

脚本加载完成后,回调函数会被触发,但不一定会执行。

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