【发布时间】:2014-06-02 10:04:05
【问题描述】:
我正在使用 $.getScript 加载脚本文件,这很好用。如果我在浏览器中检查网络选项卡,则文件确实下载成功。但是,当我尝试使用脚本文件中的函数时,它们是未定义的。 HTML 中也没有新的 script 标签。
新脚本文件下载后如何使用?
注意:该文件在下载后也不会显示在开发工具的资源选项卡中。
编辑:在下面添加代码和更多信息
正在加载的脚本文件:
var STUD = function () {
return {
STUDLoaded: function () {
alert('Working!');
}
}
}
function foo()
{
alert('bar!');
}
js 下载脚本文件并调用函数。
$.getScript(gSiteRoot + 'Scripts/Views/' + ControllerName + '.js')
.done(function (script, textStatus) {
debugger;
foo();
if ($('#hdnJSClass') != undefined)
window[$('#hdnJSClass').val()][$('#hdnJSClassFunc').val()]();
})
.fail(function (jqxhr, settings, exception) {
GEN._displayNotification('Error', 'There was an error loading the page, please retry', true);
});
在异步加载后调用函数 foo 会正确触发。所以问题出在窗口调用上,这个调用适用于我的其他 js 函数,但不适用于动态加载的函数。
【问题讨论】:
-
getScript 旨在从服务器检索脚本并立即执行。它不应该用作“包含”。
-
检查文档,使用成功回调:api.jquery.com/jquery.getscript 然后调用外部脚本内部定义的方法
-
$.getScript通过 AJAX 下载脚本并在本地对其进行评估。您既不会看到<script>标签,也不会将其视为资源。如果它不起作用,那么您可能在脚本中的某处有错误。由于它是下载 js 的自定义方式,因此很难调试它。向我们展示代码。 -
一个关于你如何使用它以及你所期望的例子可能也很有用。
-
window[$('#hdnJSClass').val()]对象存储在哪里?如果foo()有效,那么.getScript()也有效。问题在于存储在您正在寻找的对象(或对象)中的函数