我是Javascript / Jquery编程的新手,所以如果这是一个简单/愚蠢的问题就道歉。
我正在尝试使用jQuery .getScript()函数来刷新现有网页的一部分。此网页必须在本地文件系统上运行,并且使用框架完成大量格式化。
现在,有三个主要框架 - 侧边栏显示可供选择的“范围”,一个显示网页大部分内容的主框架和一个页脚框架。页面的主要条目位于index.html文件中,该文件将sidebar.html,main.html和footer.html文件加载到每个相应的框架中。
反过来,main.html有很多加载的javascript文件,主要是main.js,它包含许多函数来格式化/处理这个主窗口的内容。加载此javascript文件后,main.html会加载一些javascript文件,其中包含将在主框架中显示的数据。加载的这些文件具有固定的数据结构,并且取决于main.js文件加载的函数。
现在加载网页工作正常,但是当用户尝试切换到另一个“范围”时,将重新加载整个网页以进行切换。网页的唯一区别是main.js框架中的内容,由不同的.js文件集加载。
足够的文字,让我们看看一些代码。
当网页加载时,我尝试在index.html级别的.js文件中添加对getScript函数的简单调用,该文件处理切换范围。此文件newFile具有与先前加载的oldFile.js不同的数据定义,该文件已加载到main.html文件中。
$ getScript加入(/js/newFile.js);
但是这不起作用,因为newFile.js依赖于main.js中的parseData()函数。
如果我打开firebug,parseData不在dom选项卡中,我认为这与某个范围存在问题有关,而main.html和main.js文件存在于不同的框架中。
我尝试针对正确的“框架”进行一些定位,但我认为我不了解jQuery,不知道发生了什么。
$(window.parent.frames [0])getScript加入(/js/newFile.js);
有什么建议吗?
如果我输入firebug控制台“parseData”它找不到它:“ReferenceError:parseData未定义”
但是,如果我输入window.parent.frames [1] .parseData,它可以找到该函数。
抱歉对javascript的所有漫无边际和不了解。希望有人可以提供一些帮助!
由于
答案 0 :(得分:0)
.getScript()
在全局上下文中执行加载的脚本。我认为,因为您的parseData()
功能在全球范围内不可用。您可以尝试将parseData全局定义为jQuery.globalEval()
调用,如下所示:
$.globalEval("
function parseData(){
alert('It works!');
}
");
我没有测试,但是我使用javascript setTimeout()
函数遇到了类似的情况,因为它也是全局执行的。