简单的Comet应用程序"org未定义"

5
我正在尝试更新一个旧的cometd javascript包装器和测试客户端(原来是1.3.x版本),以使用更新的comet 2.5.1 javascript实现。我已经安装了所有依赖项,浏览器也可以找到它们,但是在Firebug控制台中出现错误(见下图) Multiple errors about "org" 我的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)
{
 ....
}

那么这不是定义org吗?请注意,控制台中的所有错误都不是来自Cometd.js。否则我看不到任何关于"org.cometd"的定义。如果有人能帮助我解决问题,我将非常感激。我正在使用Tomcat 7,以下是目录结构:

Layout of the directories for the client app

谢谢。
更新 - 进一步测试
我将标题减少到:
<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);

当您查看网络选项卡时,是否看到所有的 JS 文件已加载? - epascarello
@epascarello - 看起来一切都已经加载完毕了。 - Dennis
2个回答

5
所以问题在于我误解了Comet.org网站上的项目布局。我应该更加密切地遵循非Maven设置的cometd入门指南中发布的指导方针。基本上,当您设置项目时,您需要下载分发包,然后需要从tarball中捆绑在内的war文件中提取代码。 所以,一旦您已经提取了tarball…
  1. \cometd-2.5.1\cometd-javascript\jquery\target目录下的cometd-javascript-common-2.5.1.war\cometd-2.5.1\cometd-javascript\common\target目录下的cometd-javascript-jquery-2.5.1.war中获取org文件夹
  2. \cometd-2.5.1\cometd-javascript\common\target目录下的cometd-javascript-jquery-2.5.1.war中获取jquery文件夹

org/cometd.js文件中定义了org命名空间,我以前没有这个文件,因为我错误地认为这个文件被org/cometd/Cometd.js文件所代替。这个文件从第17行开始定义orgcomet命名空间:

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

org.cometd.JSON = {};

现在这些函数已经可以正常工作了。


3

尝试在其他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>

很遗憾,行为没有改变。 - Dennis
错误来自于jquery/jquery.cometd-reload.js - 那个文件里面有什么? - Jay Blanchard
我将内容添加到原帖中。 - Dennis
在倒数第二行中,它试图使用"org" - 有可能你正在myCometd.js文件中定义"org"吗?我有一种感觉这是一个加载顺序的问题,我们必须找到"org"的定义位置。 - Jay Blanchard
嗨Jay,感谢你到目前为止的帮助。myCometd.js根本没有“org”这个词。请参见OP,我尝试从文件中删除除主cometd.js之外的所有内容,但仍然出现相同的错误。就像我缺少依赖项一样,但我无法弄清楚。 - Dennis
看起来我搞定了,会发布答案。还是谢谢你。 - Dennis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接