【问题标题】:Javascript function error (function not defined)Javascript函数错误(函数未定义)
【发布时间】:2012-03-09 02:02:21
【问题描述】:

我在开发服务器中的一个文件上编写了一个 javascript 函数(已经对其进行了测试并且它可以工作)并且它工作得很好,我将文件上传到生产服务器并且当我测试它时出现以下错误:

Opera Dragonfly 说:

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 模板)中:

{if $product_lines_url}
    <script type="text/javascript">
        App.system.ManageProductLines.init('manage_product_lines');
    </script>
{/if}

smarty 模板中的 if 确实在执行,因为最终的 HTML 中包含 script 标记,但是在开发服务器中找到了该函数,但在生产服务器中却没有

编辑 2:

感谢 Paul Butcher,我想我离答案越来越近了,我尝试了以下方法:

<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"

奇怪的是我只得到“Start document.ready”,之后它似乎停止执行,Opera Dragonfly 和 Firebug 都显示和以前一样的错误。

【问题讨论】:

  • 你有机会发布正在爆炸的代码吗?
  • 我知道这是一个显而易见的检查,但我想知道您的 javascript 文件是否被缓存并且您需要清除缓存。还有@dtryon 所说的。
  • 在您加载 App.system.ManageProductLines 之后,立即执行 console.log 并查看 1. 是否确实已加载 2. 这段代码实际运行
  • @dtryon,我真的很想发布代码,但是由于许可问题我不能,我知道发布代码几乎是至关重要的,但遗憾的是我不被允许。
  • @caleb,我做了日志,就像我认为函数根本没有运行一样

标签: javascript function dev-to-production


【解决方案1】:

到达这条线的时间:

App.system.ManageProductLines.init('manage_product_lines');

无法确定 main.js 是否已加载或执行。您需要将该调用绑定到仅在加载所有脚本后才会发生的事件。

如果您正在使用一个,大多数 javascript 库都提供这样的事件(例如 jQuery 中的 ready)。如果您不使用一个,那么绑定到 onload 应该可以工作。

两种环境之间存在差异的一个可能原因可能是网络延迟或负载。如果开发服务器是 localhost,这种情况尤其可能发生。

【讨论】:

  • 感谢 Paul,我尝试将调用绑定到 ready,但它仍然无法启动,我已经编辑了我的原始帖子以包含我所做的,你能帮我吗??跨度>
  • 查看萤火虫,你能看到沿着这条链的任何对象是否被实例化了吗?即 App、App.system 和 App.system.ManageProductLines 都存在吗?
  • 嗯,App 和 App.system 都存在,但 App.system.ManageProductLines 似乎不存在
  • 所以听起来问题并不在于您给出的线路,而是在分配 ManageProductLines 的线路上,或者在此之前的某个位置。
【解决方案2】:

我发现了问题,问题是服务器应用程序(activecollab 2)已经有一个名称完全相同的文件,由于某种原因,它总是比我的文件具有更高的优先级,在联系 AC 支持后唯一的选择是用我的文件覆盖他们的文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 2015-02-24
    • 1970-01-01
    • 2017-06-29
    • 2015-07-06
    • 1970-01-01
    相关资源
    最近更新 更多