首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义dojox

未定义dojox
EN

Stack Overflow用户
提问于 2012-03-08 08:30:37
回答 1查看 664关注 0票数 1

我试图在dojo中使用COMET,但是它在示例的第一行中失败,并给出了消息。

未定义

dojox

我一定是错过了一些显而易见的东西

这是页面(错误在正文的第一行):

代码语言:javascript
复制
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
            "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
   <title></title>
   <script src="dojo/dojo.js"
           data-dojo-config="async:true, parseOnLoad:true">
   </script>
   <script>
      require( ["dojox/socket"] );
   </script>
</head>
<body>
<script type="text/javascript">
   var socket = dojox.socket( "/cometd" );
   function send( data ) {
      return socket.send( dojo.toJson( data ) );
   }
   socket.on( "connect", function () {
      // send a handshake
      send( [
         {
            "channel":"/meta/handshake",
            "version":"1.0",
            "minimumVersion":"1.0beta",
            "supportedConnectionTypes":["long-polling"] // or ["callback-polling"] for x-domain
         }
      ] )
      socket.on( "message", function ( data ) {
         // wait for the response so we can connect with the provided client id
         data = dojo.fromJson( data );
         if ( data.error ) {
            throw new Error( error );
         }
         // get the client id for all future messages
         clientId = data.clientId;
         // send a connect message
         send( [
            {
               "channel":"/meta/connect",
               "clientId":clientId,
               "connectionType":"long-polling"
            },
            {  // also send a subscription message
               "channel":"/meta/subscribe",
               "clientId":clientId,
               "subscription":"/foo/**"
            }
         ] );
         socket.on( "message", function ( data ) {
            alert( "message from server " + data )
         } );
      } );
   } );
</script>
</body>
</html>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-08 13:17:41

您正在混合AMD和旧的模块语法.新的AMD样式,require不会为您的命名空间创建一个全局变量,就像旧的dojo.require那样。

要么重写代码以充分使用新的AMD样式,要么删除在加载dojo以重新启用对旧模块样式的支持时添加的async=true标志。

无论如何,用AMD风格重写这个应该不难.

代码语言:javascript
复制
require([
    'dojo/_base/json', //_base is for things that used to be in the root dojo namespace.
    'dojox/socket'
],function(
    json,
    dojox_socket
){
    var socket = dojox_socket( "/cometd" );
    function send( data ) {
        return socket.send( json.toJson( data ) );
    }
    // and so on...
}); 

(顺便说一句,如果您在原来的html中没有使用任何声明性小部件,也可以删除"parseOnLoad“标志)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9614753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档