我在开发服务器上的一个文件上编写了一个javascript函数(已经测试过并且工作正常)并且工作正常,我将文件上传到生产服务器,当我测试它时,我收到以下错误:
Opera Dragonfly说:
Uncaught exception: TypeError: Cannot convert 'App.system.ManageProductLines' to object
Firebug说:
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中有脚本tage,但是在dev服务器中找到了该函数,但是在生产服务器中它不是
感谢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都显示出与以前相同的错误。
答案 0 :(得分:3)
到达此行时:
App.system.ManageProductLines.init('manage_product_lines');
无法确定main.js已被加载或执行。您需要将该调用绑定到仅在加载所有脚本后才会发生的事件。
如果您使用的是,大多数JavaScript库都会提供此类事件(例如jQuery中的ready
)。如果您没有使用它,那么绑定到onload应该可行。
两种环境之间差异的一个可能原因可能是网络延迟或负载。如果开发服务器是localhost,则特别有可能。
答案 1 :(得分:1)
我发现了问题,问题是服务器应用程序(activecollab 2),已经有一个名称完全相同的文件,由于某些原因,我的文件始终保持较高的优先级,在联系AC支持之后唯一的选择是用我的文件覆盖他们的文件。