Javascript函数错误(未定义函数)
我在开发服务器中的一个文件上编写了一个javascript函数(已经测试过了,可以正常工作),它工作得很好,我将该文件上传到生产服务器,测试时,我得到以下错误: 歌剧蜻蜓说:Javascript函数错误(未定义函数),javascript,function,dev-to-production,Javascript,Function,Dev To Production,我在开发服务器中的一个文件上编写了一个javascript函数(已经测试过了,可以正常工作),它工作得很好,我将该文件上传到生产服务器,测试时,我得到以下错误: 歌剧蜻蜓说: Uncaught exception: TypeError: Cannot convert 'App.system.ManageProductLines' to object 萤火虫说: App.system.ManageProductLines is undefined 这些文件完全相同(我使用WinMerge进行了
Uncaught exception: TypeError: Cannot convert 'App.system.ManageProductLines' to object
萤火虫说:
App.system.ManageProductLines is undefined
这些文件完全相同(我使用WinMerge进行了检查,没有发现任何差异),唯一的区别是它们所在的服务器
我的开发服务器是windows上最新版本的Xampp,而生产服务器是OpenSuse上最新版本的Xampp
有人知道发生了什么吗
编辑:
根据dtryon的建议,下面是一些示例代码:
在main.js中
App.system.ManageProductLines = function()
{
var init_row = function(row)
{
//function to add table row behavior
}
var reindex_odd_even_rows = function(table)
{
//function to reoder table when row is deleted
}
}
在index.tpl(Smarty模板)中:
奇怪的是,我只得到了“Start document.ready”,之后它似乎停止了执行,Opera Dragonfly和Firebug都显示了与之前相同的错误。在到达此行时:
App.system.ManageProductLines.init('manage_product_lines');
无法确定main.js是否已加载或执行。您需要将该调用绑定到仅在加载所有脚本后才会发生的事件
如果您正在使用一个javascript库,大多数javascript库都会提供这样的事件(例如jQuery中的ready
)。如果您没有使用,那么绑定到onload应该可以工作
两种环境之间存在差异的一个可能原因可能是网络延迟或负载。如果开发服务器是本地主机,则这种情况尤其可能发生。我发现了问题,问题是服务器应用程序(activecollab 2)已经有一个名称完全相同的文件,出于某种原因,该文件的优先级始终高于我的文件,联系AC支持人员后,唯一的选择是用我的文件覆盖他们的文件。你有没有可能发布爆炸性的代码?我知道这是一件显而易见的事情,但我想知道你的javascript文件是否已缓存,你需要清除缓存。还有@dtryon所说的。加载App.system.ManageProductLines后,立即执行
控制台.log
并查看是否为1。它真的是加载了2。那段代码实际上runs@dtryon,我真的很想发布代码,但是由于许可问题,我不能发布,我知道发布代码几乎是至关重要的,但遗憾的是我不被允许发布。@caleb,我做了日志,就在我认为函数根本没有运行的时候谢谢Paul,我尝试将调用绑定到ready,然而,它仍然不会开始,我已经编辑了我的原始帖子,包括我所做的,你能帮我吗?看看firebug,你能看到沿着该链的任何对象都被实例化了吗?i、 e.App、App.system和App.system.ManageProductLines都存在吗?嗯,App和App.system都存在,但App.system.ManageProductLines似乎不存在,所以听起来问题并不是在你给出的那一行,而是在分配ManageProductLines的那一行,或者在那之前的某一行。
<script type="text/javascript">
$(document).ready(function()
{
App.system.ManageProductLines.init('manage_product_lines');
});
</script>
<script type="text/javascript">
$(document).ready(function()
{
alert("Start document.ready");
if(App.system.ManageProductLines.init)
{
alert("Method found");
App.system.ManageProductLines.init('manage_product_lines');
}
else
{
alert("Method not found");
}
alert("End document.ready");
});
"Start document.ready", "Method found" || "Method not found", "End document.ready"
App.system.ManageProductLines.init('manage_product_lines');