Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript函数错误(未定义函数)_Javascript_Function_Dev To Production - Fatal编程技术网

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进行了

我在开发服务器中的一个文件上编写了一个javascript函数(已经测试过了,可以正常工作),它工作得很好,我将该文件上传到生产服务器,测试时,我得到以下错误:

歌剧蜻蜓说:

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');