socket.io - ReferenceError:未定义io

时间:2012-08-16 21:04:23

标签: javascript android ios socket.io referenceerror

我正在为Android 2.3.5编写一个应用程序(也将与iOS兼容)。我希望将数据从应用程序的HTML / Javascript传输到服务器上的Python程序(使用Twisted引擎检索数据)。

我尝试了很多东西并查看了各种论坛,答案,教程和网页 - 其中大部分都在这里 - 并且无法找到答案。这是我在index.html文件中的相关Javascript:

<script src="socket-lib/socket.io.js"></script>
<script type="text/javascript" charset="utf-8">
function sendData() {
    try {
        var socket = io.connect('http://mywebsite.com:12345');
        socket.on('connect', function(data) {
            socket.send('Hello.');
            socket.on('message', function (msg) {
                socket.send('This is where I send data?');
            });
        });
    }
    catch(err) {
        alert('ERROR: socket.io encountered a problem:\n\n' + err);
    }
} // end of sendData

如果你不能说,我仍然很困惑这是如何工作的;我甚至无法测试任何东西。不断出现的错误是ReferenceError: io is not defined。有些网站使用var io = require('socket.io');之类的内容。但是它会导致同样的错误:ReferenceError: require is not defined

我将socket-lib文件夹放在assets / www中,其中任何其他Javascript源都应该放在其中。这也是index.html文件的位置。许多网站使用<script src="/socket.io/socket.io.js"></script>,但这对我没有意义。许多网站也暗示使用node.js,但我从未在任何地方看到它。

我该如何做到这一点?

回复编辑:

我在Chrome中尝试过,它为socket.io.js文件提供了Uncaught ReferenceError: require is not defined。所以我决定在它之前使用require.js。然后它给出错误Uncaught Error: Module name "socket.io-client" has not been loaded yet for context。因为我没有使用它,所以我不在意。但是,当我尝试连接时,它会给出相同的io is not defined错误。当我将其定义为var io = require('socket.io')时,错误为Error: Module name "socket.io" has not been loaded yet for context: _ http://requirejs.org/docs/errors.html#notloaded。我查看了网站,它根本没有帮助我。当我尝试将“require”作为函数参数时,会发生另一个错误:TypeError: undefined is not a function

9 个答案:

答案 0 :(得分:52)

我找到了那些因socket.io的可怕缺乏文档而感到极度困惑的人的答案。

您无法获取/socket-lib/socket.io.js

您必须提供http://yourwebsite.com:12345/socket.io/socket.io.js

服务器会自动为您完成剩下的工作。

答案 1 :(得分:6)

我自己通过更改index.html从bower导入socket io客户端来解决它,首先我安装了bower组件:

 bower install socket.io-client

然后我将index.html中的引用更改为:

 <script src="bower_components/socket.io-client/socket.io.js"></script>

或者文件可以在 - lib / socket.io-client / dist / socket.io.js找到

答案 2 :(得分:1)

当使用require.js使socket.io与许多其他库一起工作时,我遇到了同样的错误,结果是因为尝试从同一个/ js文件夹中加载socket.io.js文件而导致其余的其他文件。

将它放在一个单独的文件夹中,为我修复它,你可以看到 code in this gist 但是为了让它起作用我改变了所有内容,是这样的:

而不是:

  

socketio:'socket.io',

使用:

  

socketio:'.. / socket.io/socket.io',

不确定这种行为的原因,但我希望它可以帮到你。

答案 3 :(得分:1)

在socket.io.js文件中编写服务器端代码并​​尝试src =“/ socket.io/socket.io.js”

希望这能解决您的问题

答案 4 :(得分:0)

这看起来像您的浏览器找不到socket.io.js文件。您可以尝试使用Firefox + Firebug或Chrome Web开发人员工具打开计算机上的index.html,并查看如何请求.js文件。另一方面,您可以检查服务于.js文件的Web服务器上的日志是否有任何文件未找到错误。

require功能将由例如提供。 RequireJS,但您仍需要正确配置脚本的路径才能使其正常工作。

答案 5 :(得分:0)

我设法犯了这个错误,浪费了大约一个小时,发现这是一个非常基本的错误。

何时未定义功能?例如“Uncaught ReferenceError:io未定义”。这是否意味着该函数在“创建”之前被“使用”了?

在我的HTML文件中,“调用”javaScript文件, 看起来像 ,如下所示:

<script src='./js/playerChatter.js'></script> <!-- this one calls io -->
<script src="http://localhost:2019/socket.io/socket.io.js"></script><!-- This Creates io -->

更改为

<script src="http://localhost:2019/socket.io/socket.io.js"></script> <!-- This Creates  io -->
<script src='./js/playerChatter.js'></script> <!-- this on calls io -->

所以现在项目“io”,无论是对象还是函数......实际上是在它被使用之前创建的:D

有乐趣!

答案 6 :(得分:0)

对我来说,通过调试所有非常有用的建议后,结果就是我的节点服务器停止了。我在开发期间在终端窗口中手动运行它。

确保您的节点[yourservercode] .js正在指定的端口上运行! : - ]

答案 7 :(得分:0)

我使用jspm。

添加:

import 'btford/angular-socket-io/mock/socket-io';

答案 8 :(得分:0)

就我而言,使用带有 C# UnitySocketIO 插件的 Unity WebGL,我需要在 Init 和 Connect 之间添加 delay(1 秒),因为第一种方法没有时间向页面添加新的 JS Socket 对象和代码(侦听器)以使用它..