相同的JavaScript代码在两种不同的环境中表现不同

时间:2014-01-29 15:31:27

标签: javascript jquery jquery-ui

我在一个巨大的网站上有一个正在运行的jQuery Progress Bar代码(http://jqueryui.com/progressbar/),直到新版本崩溃时出现错误“Uncaught TypeError:Object [object Object]没有方法'progressbar'”。

我确定了根本原因,因为jQuery被多次添加,这在发布过程中以某种方式发生。网站上的许多其他地方,例如,使用jQuery Chosen(http://plugins.jquery.com/chosen/)的地方也崩溃了。

我设法使用jQuery.noConflict()修复它;在问题调用之前,一切都恢复了和平。新版本发布到生产环境,每个人都很高兴。

事实证明,除了jQuery Progress Bar之外的其他所有东西都是固定的。为了让它变得更有趣,我回到了我的测试环境中,绝对一切都在那里工作,包括进度条。

我将服务器上的所有文件与我的测试环境中的文件进行了比较,代码完全相同。所有其他JavaScript在服务器上都没有问题,但jQuery Progress Bar只能在我的测试环境中继续工作,但在生产中不会出现“Uncaught TypeError:Object [object Object]没有方法'progressbar'”的情况。有什么想法或提示可能是什么问题?

1 个答案:

答案 0 :(得分:1)

这种类型的错误不是因为冲突,而是因为当你的html加载时,jquery开始执行。并找到你正在尝试null的{​​{1}}引用。最好的方法是将ui标记放在文档的末尾。然后,您的html可能已加载,并且您<script>附加的object将准备好附加到。

并且,由于我们的测试环境是本地的,因此脚本文件将是本地的并立即加载,而生产并非如此,您无法确定不同人员的带宽。而且,这些东西有时会像对待缓存文件那样欺骗我们,这是第二次,但也可能不适用于每个客户端。