socket.io - ReferenceError: io 未定义

IT技术 javascript android ios socket.io referenceerror
2021-03-21 19:27:13

我正在为 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 中试过了,它给了我一个Uncaught ReferenceError: require is not definedsocket.io.js 文件。所以我决定在它之前使用 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我看了网站,它根本没有帮助我。当我试图把“规定”作为函数的参数,出现另一个错误:TypeError: undefined is not a function

6个回答

我为那些因socket.io.

你不能来源/socket-lib/socket.io.js

你必须来源http://yourwebsite.com:12345/socket.io/socket.io.js

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

我已经忘记了创建VirtualHost/etc/apache2/httpd.conf点在我的节点服务器所运行的端口,在我的情况下,它是<VirtualHost *:8000>...
2021-04-26 19:27:13
而这里提到的端口(12345)只不过是节点运行socket.io的端口
2021-04-28 19:27:13
为什么?这是一个客户端库,为什么需要从您尝试连接的服务器加载它?连接参数在连接方法中。
2021-05-13 19:27:13
我打开了一个新目录,安装了依赖项并且它工作了!有时,这只是一个错误的安装......也许是一个损坏的依赖项(或权限)。
2021-05-13 19:27:13
由于这一行,我收到此错误:<script src="//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.8/require.min.js"></script> 看起来像废话,因为当我在新的 html 文件中使用时 - 它正在工作,但随后被部分尝试 - 使用 php die() 并从文件的开头开始 - 它一直在工作,直到我的套接字脚本在 require.js lib 之后运行。早些时候它没有造成任何伤害,但也许当节点更新某些东西时 - 它坏了。
2021-05-14 19:27:13

我自己通过更改 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 找到

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

什么时候没有定义函数?比如“Uncaught ReferenceError: io is not defined”。这不意味着函数在“创建”之前就被“使用”了吗?

在我的 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

玩得开心!

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

希望这能解决你的问题

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

将它放在一个单独的文件夹中,为我修复它,你可以看到这个要点中代码,但我为了让它工作而改变的,是这样的:

代替:

socketio: 'socket.io',

利用:

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

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

由于已安装的 socket.io 包的文件夹结构。它必须指向根服务器文件夹,然后指向 socket.io 路径
2021-04-22 19:27:13