当通过ajax加载dojo.js多次得到错误:defineAlreadyDefined

Posted

技术标签:

【中文标题】当通过ajax加载dojo.js多次得到错误:defineAlreadyDefined【英文标题】:When dojo.js loaded via ajax multiple times get Error: defineAlreadyDefined 【发布时间】:2012-03-20 09:38:03 【问题描述】:

我使用 jquery 通过 ajax 加载子页面。子页面有一些第一次可以正常工作的 dojo 小部件。但随后的加载我得到错误:defineAlreadyDefined 并且在此之后的其余 javascripts 没有运行,这意味着一些关键的 jquery 指令,例如用户界面布局。 任何人都可以提供帮助,因为我在网上搜索了 dojo 的“错误:defineAlreadyDefined”,我想出的最好的方法是在 dojo 1.6 中解决了它,但是我使用的是 1.7.2 。我希望我在做一些愚蠢的事情,因为这非常令人沮丧,因为您希望用户执行刷新等操作可以多次加载 dojo.js。我应该补充一点,我尝试将 dojo.js 放在主 html 页面中,但是然后我收到了加载子页面时找不到dijit的问题。

【问题讨论】:

在同一个应用程序中同时使用 JQuery 和 dojo 很奇怪...为什么不在顶部添加原型和 motools 呢?它可能会有所帮助! ;-) 尝试在主页中放置 dojo.js 以及所有 dijit 的声明。另外,如果可以,请摆脱这两个框架之一。 它是一个相当广泛的应用程序,许多模块都是使用 jQuery 作为基础编写的。但我发现 Dojo 为字段、文本编辑器和网格提供了更多功能。我对 jQuery 和 Dojo 共存的大部分询问都是积极的,所以我认为我会朝着这个方向前进。除了上面的问题,它发生在我身上。忽略额外的内存等。我只是不明白为什么我不能解决它。 问题是你的错误很笼统。这只是意味着您正在重新定义注册表中已经存在的对象。你用什么做 UI 布局?看起来重新加载面板不会正确破坏内部对象。您可以尝试将您的 UI 布局组件替换为 dijit.layout 中的组件还是工作量太大? 我在所有页面上都使用 jquery UI 布局,更像这样:- 有一个带有页眉、页脚、左、右和中间窗格的 html 页面。当从菜单中选择一个页面时,我有一个 jscript,它为中心窗格执行 ajax 调用,并且可能(取决于页面)一个 ajax 调用来加载左窗格和/或右窗格。页眉和页脚往往是稳定的。对于通过 ajax 加载的每个窗格,首先执行销毁。 if(typeof(innerCenterLayout) != "undefined") innerCenterLayout.destroy(); $(".ui-layout-center").html(""); 第一次在中间窗格加载道场,隐藏左右窗格,效果很好。我将另一个非 dojo 页面加载到中心窗格,这很好,然后当我返回重新加载 dojo 页面时,我得到了错误。 【参考方案1】:

dojo.js 定义了一个名为define 的全局变量。如果您多次加载 dojo.js 并且它让您知道 define 已经定义,我相当肯定您看到的错误来自。理想情况下,您应该只加载一次 dojo.js。

【讨论】:

谢谢,我当然错过了那个,因为我将定义解释为一条消息,而不是变量的名称。是的,我是多重加载,因为它是通过 ajax 调用进入的,由于使用了 dijit,我目前无法更改此方法。【参考方案2】:

我无法解决实际的错误消息,我相信它的原因隐藏在重新加载时的 dojo 初始加载中。但是,为了解决 UI 布局窗格的重新对齐问题,我在 ajax onComplete 函数中包含了myLayout.initContent("center")​

【讨论】:

以上是关于当通过ajax加载dojo.js多次得到错误:defineAlreadyDefined的主要内容,如果未能解决你的问题,请参考以下文章

dojo和jquery混合使用

当 window.location=self.location 不起作用时通过 AJAX 重新加载页面

错误:通过 ajax jquery 加载数据时无法读取未定义的属性“样式”

页面大量的节点Dtree一次加载很慢,多次弹出提示框,需点击否多次,才加载完,怎么用ajax异步加载节点!

在滚动 laravel ajax 上加载更多数据

使用 Dojo AMD 加载程序加载 jQuery 问题