socket.io - 引用错误:未定义 io
socket.io - ReferenceError: io is not defined
我正在为Android 2.3.5编写一个应用程序(它也将与iOS兼容)。我希望将数据从应用程序的HTML/Javascript传输到服务器上的Python程序(该程序使用Twisted引擎检索数据)。
我尝试了很多东西,查看了各种论坛、答案、教程和网页——包括这里的大部分——但找不到答案。这是我的索引.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源代码都应该放在那里。这也是索引.html文件所在的位置。许多网站使用<script src="/socket.io/socket.io.js"></script>
,但这对我来说毫无意义。许多网站也暗示使用node.js,但我从未在任何地方看到它。
我怎样才能做到这一点?
回复编辑:
我在Chrome中尝试过,它为我提供了socket.io.js文件的Uncaught ReferenceError: require is not defined
。所以我决定在它之前.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
。
我为任何因严重缺乏socket.io
文档而感到非常困惑的人找到了答案。
您无法获取/socket-lib/socket.io.js
,
您必须获取http://yourwebsite.com:12345/socket.io/socket.io.js
。
服务器会自动为您完成其余工作。
我自己通过更改索引解决了它.html 要从 bower 导入套接字 io 客户端,首先我安装了 bower 组件:
bower install socket.io-client
然后我将索引.html中的引用更改为:
<script src="bower_components/socket.io-client/socket.io.js"></script>
或者文件可以在 - lib/socket.io-client/dist/socket.io 找到.js
我设法错误地完成了这个问题,并浪费了大约一个小时,结果证明是一个非常基本的错误。
当函数未定义时?如" 未捕获的引用错误: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
玩得愉快!
socket.io.js文件中编写服务器端代码,然后尝试src="/socket.io/socket.io.js"
希望这将解决您的问题
当使用 require.js 让 socket.io 与许多其他库一起工作时,我遇到了同样的错误,结果证明是由于尝试从与其他文件相同的/js 文件夹中加载 socket.io.js 文件引起的。
将其放在一个单独的文件夹中,为我修复了它,您可以看到此要点中的代码,但我为使其工作而更改的只是:
而不是:
插座:"socket.io",
用:
插座:"../socket.io/socket.io',
不确定这种行为的原因,但我希望对您有所帮助。
看起来您的浏览器找不到socket.io.js文件。您可以尝试使用Firefox + Firebug或Chrome Web Developer Tools在计算机上打开索引.html并查看如何请求.js文件。另一方面,您可以检查提供.js文件的Web服务器上的日志是否有任何未找到文件的错误。
require
函数将由例如 RequireJS 提供,但您仍然需要正确配置脚本的路径才能使其正常工作。
对我来说,在调试了所有非常有用的建议后,结果只是我的节点服务器已经停止。在开发过程中,我一直在终端窗口中手动运行它。
确保您的节点 [您的服务器代码].js 在指定的端口上运行! :-]
我使用jspm。
添加这个:
import 'btford/angular-socket-io/mock/socket-io';
就我而言,使用Unity WebGL和C# UnitySocketIO插件,我需要在Init和Connect之间添加延迟(1秒),因为第一种方法没有时间向页面添加新的JS套接字对象和代码(侦听器)来使用它。
如其他答案中所述,您必须使用完整的URL。
<script src="http://127.0.0.1:5565/socket.io/socket.io.js "></script>
如果它给你一个错误404,请检查你的服务器上是否正确实例化了IO.js如果没有,请参考以下内容以正确实例化IO。
<script>
var socket = io();
</script>
在您的服务器中.js
const app = express();
const http = require('http'); //from express module
const server = http.createServer(app);
const { Server } = require("socket.io");
const io = new Server(server);
必须/socket.io/socket.io.js
url 并检查是否提供 js 文件,如果是,而不是写
var socket = io();
写
window.onload= function(){
var socket = io();
}
- 为什么“;未定义的“;在JavaScript中结束循环
- 要求未定义JS回调参数
- Socket.IO未定义变量
- Node.js-socket.io-对io.sockets的引用突然未定义
- WebRTC,socket.io,node.js:无法读取属性'发射'的未定义
- socket.io - 引用错误:未定义 io
- Socket.io“侦听器未定义”
- 'io未定义'在客户端上.在HTML中包含socket.io脚本标记
- 未捕获的类型错误: 无法读取未定义 Phaser.io 的属性“补间”
- 节点.js socket.io.js找不到或未定义 io
- 未定义 socket.io 错误不是函数
- ReferenceError:io未在NodeJS中定义
- 将socket.io/socket.io.js加载到html头中返回"ReferenceError:io未定义
- 类型错误:this.io是未定义的套接字.io.js:639
- 套接字.io抛出" TypeError: Cannot read property 'push'未定义的
- 不能读取property 'emit'使用React/Socket.IO的未定义错误
- 带有require.js async和io的Socket.io未定义
- Socket.IO命名空间,调用未定义的函数.of()
- 未捕获的类型错误:无法读取未定义的 sails.io.js 的属性“原型”
- 套接字.io ReferenceError客户端未定义