我正在尝试以编程方式加载本地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;
}
如果有帮助,则从打字稿文件中调用整个代码 我做错了什么?
答案 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(){...})
等待它执行。