1

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

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

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

ReferenceError: 爸爸没有定义

papaparse库中,Papa定义如下:

(function (global) {
    "use strict";

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

如果这有帮助,那么整个代码都是从打字稿文件中调用的。
我究竟做错了什么?

4

2 回答 2

2

正如卡斯特罗在这里的回答中指出的那样,根据 Jquery 的官方文档getScript

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

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

您可以setTimeout/setInterval在 getScript 的回调函数内部使用。

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

$.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);

});

我希望这能消除你的疑问。

于 2016-07-04T17:07:44.860 回答
0

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

一旦脚本被加载但不一定执行,回调就会被触发。

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

于 2016-07-04T15:33:45.607 回答