使用jQuery加载脚本后无法使用javascript函数
Cannot use javascript function after script loaded using jQuery
我正在尝试以编程方式加载本地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(){...})
来等待它执行
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 正在全局范围中查找JavaScript函数
- 如何将输入(type=text)从html表单传递到javascript函数
- 如何调用这个匿名 JavaScript 函数
- 通过Ajax将JavaScript函数传递给PHP文件
- 在javascript函数中设置全局变量
- 如何在执行此特定onclick事件时执行JavaScript函数
- 使用javascript函数在页面初始化后加载jquery
- javascript函数同步
- 如何将一个JavaScript函数回调为多个函数
- 在javascript函数中使用php变量
- 代码背后调用一个JavaScript函数的按钮点击-C#
- 将JavaScript函数与HTML分离
- 组合两个javascript函数
- 在 Java 中的 JavaScript 函数中插入 Wicket 值
- javascript函数内部的代码用逗号而不是分号分隔
- href属性内的javascript函数
- 使用html表单中的参数调用JavaScript函数
- 分析Javascript函数中的多个对象
- javascript函数的:和=之间的区别