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

时间:2016-07-04 15:27:08

标签: javascript jquery typescript papaparse

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

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

脚本已成功加载,但调用解析方法会引发错误:

  

ReferenceError:未定义Papa

papaparse 库中, Papa 定义如下:

(function (global) {
    "use strict";

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

如果有帮助,则从打字稿文件中调用整个代码 我做错了什么?

2 个答案:

答案 0 :(得分:2)

正如卡斯特罗在答案here中指出的那样,根据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);

});

我希望这会清除你的怀疑。

答案 1 :(得分:0)

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

  

一旦脚本加载但未必执行,就会触发回调。

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