【问题标题】:Simple comet application "org is not defined"简单的彗星应用程序“未定义组织”
【发布时间】:2013-01-14 09:02:26
【问题描述】:

我正在尝试将旧的 cometd javascript 包装器和测试客户端(为 1.3.x)更新为较新的 comet 2.5.1 javascript 实现。我有所有的依赖项,浏览器可以找到它们,但我在 Firebug 的控制台中遇到错误(见下文)

我的 HTML 的头部如下:

<head>
    <title>CometD Tester</title>
    <link rel="stylesheet" type="text/css"href="style/style.css" />
    <script type="text/javascript" src="org/cometd/Cometd.js"></script>
    <script type="text/javascript" src="org/cometd/AckExtension.js"></script>
    <script type="text/javascript" src="org/cometd/ReloadExtension.js"></script>
    <script type="text/javascript" src="jquery/jquery-1.9.0.js"></script>
    <script type="text/javascript" src="jquery/jquery.cookie.js"></script>
    <script type="text/javascript" src="jquery/jquery.cometd.js"></script>
    <script type="text/javascript" src="jquery/jquery.cometd-reload.js"></script>
    <script type="text/javascript" src="js/myCometd.js"></script>
</head>

所有这些都由浏览器找到。查看Cometd.js 我看到以下内容:

org.cometd.Cometd = function(name)
{
 ....
}

那不是定义组织吗?请注意,控制台中的任何错误都不是来自Cometd.js。否则我看不到“org.cometd”的其他定义。如果有人可以帮助我,我将不胜感激。我使用的是Tomcat 7及以下是目录结构:

谢谢。

更新 - 进一步测试

我将标题缩减为:

<head>
    <title>CometD Tester</title>
    <link rel="stylesheet" type="text/css"href="style/style.css" />
    <script type="text/javascript" src="org/cometd/Cometd.js"></script>
</head>

并从 index.html 中删除所有 JS。现在唯一包含的 JS 是来自 comet.org 的 Cometd.js。仍然有同样的错误......来自该脚本的第一行:

org.cometd.Cometd = function(name)

不知道我在这里错过了什么。

编辑 - 添加 jquery.cometd-reload.js 这是文件的内容。看起来它是来自 cometd 库的“重新绑定”功能,以使用 jquery 代替(?)。我在 JS 中的调试速度不够快(我真的是 C++ 开发人员)。

(function($)
{
    function bind(org_cometd, cookie, ReloadExtension, cometd)
    {
        // Remap cometd COOKIE functions to jquery cookie functions
        // Avoid to set to undefined if the jquery cookie plugin is not present
        if (cookie)
        {
            org_cometd.COOKIE.set = cookie;
            org_cometd.COOKIE.get = cookie;
        }

        var result = new ReloadExtension();
        cometd.registerExtension('reload', result);
        return result;
    }

    if (typeof define === 'function' && define.amd)
    {
        define(['org/cometd', 'jquery.cookie', 'org/cometd/ReloadExtension', 'jquery.cometd'], bind);
    }
    else
    {
        bind(org.cometd, $.cookie, org.cometd.ReloadExtension, $.cometd);
    }
})(jQuery);

【问题讨论】:

  • 查看net选项卡时,是否看到所有的js文件都加载了?
  • @epascarello - 看起来一切正常。

标签: javascript jquery comet


【解决方案1】:

所以问题是我误解了 Comet.org 网站的项目布局。我应该更密切地遵循cometd primer for non-maven setups 上发布的方向。基本上,当您设置项目时,您下载发行版,然后您需要从捆绑在 tarball 中的 war 文件中获取代码。 所以,一旦你提取了压缩包......

  1. cometd-javascript-common-2.5.1.war(位于\cometd-2.5.1\cometd-javascript\jquery\target)或cometd-javascript-jquery-2.5.1.war(位于\cometd-2.5.1\cometd-javascript\common\target)获取组织文件夹
  2. cometd-javascript-jquery-2.5.1.war获取jquery文件夹

org 命名空间定义在我以前没有的文件 org/cometd.js 中,因为我错误地认为它已被 org/cometd/Cometd.js 文件替换。从该文件的第 17 行开始,命名空间 orgcomet 定义如下:

// Namespaces for the cometd implementation
this.org = this.org || {};
org.cometd = {};

org.cometd.JSON = {};

这些功能现在可以正常工作了。

【讨论】:

    【解决方案2】:

    尝试在任何其他 JavaScript 文件之前加载 jQuery -

    <head>
        <title>CometD Tester</title>
        <link rel="stylesheet" type="text/css"href="style/style.css" />
        <script type="text/javascript" src="jquery/jquery-1.9.0.js"></script> <!-- load first -->
        <script type="text/javascript" src="org/cometd/Cometd.js"></script>
        <script type="text/javascript" src="org/cometd/AckExtension.js"></script>
        <script type="text/javascript" src="org/cometd/ReloadExtension.js"></script>
        <script type="text/javascript" src="jquery/jquery.cookie.js"></script>
        <script type="text/javascript" src="jquery/jquery.cometd.js"></script>
        <script type="text/javascript" src="jquery/jquery.cometd-reload.js"></script>
        <script type="text/javascript" src="js/myCometd.js"></script>
    </head>
    

    【讨论】:

    • 很遗憾行为没有改变。
    • 错误来自 jquery/jquery.cometd-reload.js - 该文件中有什么内容?
    • 我将内容添加到了 OP。
    • 在它尝试使用 org 的倒数第二行 - 您是否有可能在 myCometd.js 中定义 org?我感觉这是一个加载顺序问题,我们必须找到 org 的定义位置。
    • 嘿,杰伊,感谢您到目前为止的帮助。 myCometd.js 中根本没有“org”这个词。请参阅 OP 我尝试从文件中删除除主 cometd.js 之外的所有其他内容,得到相同的错误。这几乎就像我缺少依赖项,但我无法弄清楚。
    猜你喜欢
    • 2011-12-23
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 2011-07-28
    • 2021-01-27
    相关资源
    最近更新 更多