socket.io – ReferenceError:未定义io

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

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

  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文件的位置。 许多站点使用 ,但这对我没有意义。 许多网站也暗示使用node.js,但我从未在任何地方看到它。

我怎样才能做到这一点?

回复编辑:

我在Chrome中试过它,它给了我一个Uncaught ReferenceError: require is not defined为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

我find了那个因socket.io可怕的缺乏文档而非常困惑的人的答案。

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

你必须findhttp://yourwebsite.com:12345/socket.io/socket.io.js

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

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

  bower install socket.io-client 

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

   

或者可以在 – lib / socket.io-client / dist / socket.io.jsfind文件

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

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

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

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

代替:

socketio:’socket.io’,

使用:

socketio:’../socket.io/socket.io’,

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

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

什么时候没有定义函数? 例如“Uncaught ReferenceError:io未定义”。 这是否意味着该函数在“创建”之前被“使用”?

在我的HTML文件中,“调用”javaScript文件,它看起来像这样:

    

改成了这个

     

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

玩的开心!

通过调试所有非常有用的建议后,对我来说,事实certificate我的节点服务器已经停止了。 在开发期间我一直在终端窗口中手动运行它。

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

我用的是jspm。

添加这个:

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

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

希望这能解决你的问题