我正在尝试更新旧的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,以下是目录结构:

谢谢。

更新-进一步测试

我将 header 简化为:
<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库的“重新绑定(bind)”功能是使用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);

最佳答案

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

  • 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中)中获取org文件夹
  • cometd-javascript-jquery-2.5.1.war获取jQuery文件夹

  • org namespace 定义位于文件org/cometd.js中,该文件以前没有,因为我错误地认为它已被org/cometd/Cometd.js文件替换。从该文件的第17行开始,命名空间orgcomet的定义如下:
    // Namespaces for the cometd implementation
    this.org = this.org || {};
    org.cometd = {};
    
    org.cometd.JSON = {};
    

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

    关于javascript - 简单的 cometd 应用程序 "org is not defined",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14605831/

    10-09 18:03