javascript - socket.io-ReferenceError: io no está definido
android ios (8)
Cuando conseguí que socket.io funcionara con muchas otras bibliotecas usando require.js tuve el mismo error, resultó que se debió a que intenté cargar el archivo socket.io.js desde la misma carpeta / js que el resto de la otra. archivos.
Colocándolo en una carpeta separada, lo arreglé para mí, puedes ver el código en esta lista, pero todo lo que cambié para hacerlo funcionar, fue esto:
en lugar de:
socketio: ''socket.io'',
Utilizar:
socketio: ''../socket.io/socket.io'',
No estoy seguro de la razón de este comportamiento, pero espero que te ayude.
Estoy escribiendo una aplicación para Android 2.3.5 (que también será compatible con iOS). Deseo transferir los datos del HTML / Javascript de la aplicación a un programa Python en un servidor (que utiliza el motor Twisted para recuperar los datos).
He intentado muchas cosas y he buscado en varios foros, respuestas, tutoriales y páginas web, incluyendo la mayoría de ellos aquí, y no puedo encontrar una respuesta. Aquí está el Javascript relevante que tengo en mi archivo index.html:
<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
Si no puedes decirlo, todavía estoy bastante confundido de cómo funciona esto; Ni siquiera puedo probar nada. El error que sigue apareciendo es ReferenceError: io is not defined
. Algunos sitios utilizan algo como var io = require(''socket.io'');
. Pero luego da como resultado el mismo error: ReferenceError: require is not defined
.
Puse la carpeta socket-lib en asset / www, donde debería ir cualquier otra fuente de Javascript. Aquí también es donde está el archivo index.html. Muchos sitios usan <script src="/socket.io/socket.io.js"></script>
, pero esto no tiene sentido para mí. Muchos sitios también implican el uso de node.js, pero nunca lo veo en ninguna parte.
¿Cómo puedo hacer que esto funcione?
Responder ediciones:
Lo probé en Chrome, y me está dando un Uncaught ReferenceError: require is not defined
capturado Uncaught ReferenceError: require is not defined
para el archivo socket.io.js. Así que decido la fuente en require.js justo antes. Luego se muestra el error Uncaught Error: Module name "socket.io-client" has not been loaded yet for context
. Como no estoy usando esto, no me importa. Cuando intento la conexión, sin embargo, da que el mismo io is not defined
error io is not defined
. Cuando lo defino como var io = require(''socket.io'')
, el error es Error: Module name "socket.io" has not been loaded yet for context: _ http://requirejs.org/docs/errors.html#notloaded
. Miré el sitio web, y no me sirve de nada. Cuando trato de poner "require" como un argumento de función, ocurre otro error: TypeError: undefined is not a function
.
Encontré la respuesta para cualquiera que se socket.io
inmensamente confundido por la horrible falta de documentación de socket.io
.
No puede fuente /socket-lib/socket.io.js
,
debe fuente http://yourwebsite.com:12345/socket.io/socket.io.js
.
El servidor automáticamente hace el resto por ti.
Lo resolví yo mismo cambiando index.html para importar el cliente socket io desde bower, primero instalé el componente bower:
bower install socket.io-client
Luego cambié la referencia en index.html a:
<script src="bower_components/socket.io-client/socket.io.js"></script>
O el archivo se puede encontrar en - lib / socket.io-client / dist / socket.io.js
Logré equivocarme a través de esto, y desperdicié aproximadamente una hora, en algo que resultó ser un error muy básico.
Cuando una función no está definida? Tales como "Uncought ReferenceError: io no está definido". ¿Eso no significa que la función se está "utilizando" antes de que se "cree"?
En la parte de mi archivo HTML, que "llama" a los archivos javaScript, se veía así:
<script src=''./js/playerChatter.js''></script> <!-- this one calls io -->
<script src="http://localhost:2019/socket.io/socket.io.js"></script><!-- This Creates io -->
y lo cambié a esto
<script src="http://localhost:2019/socket.io/socket.io.js"></script> <!-- This Creates io -->
<script src=''./js/playerChatter.js''></script> <!-- this on calls io -->
Así que ahora el elemento "io", ya sea un objeto o una función ... En realidad se está creando antes de que se use: D
¡Que te diviertas!
Para mí, después de depurar a través de todas las sugerencias muy útiles, resultó ser simplemente que mi servidor de nodo se había detenido. Lo había estado ejecutando manualmente en una ventana de terminal durante el desarrollo.
¡Asegúrese de que su nodo [yourservercode] .js se esté ejecutando en el puerto especificado! : -]
Parece que su navegador no puede encontrar el archivo socket.io.js. Puede intentar abrir el archivo index.html en su computadora con Firefox + Firebug o las Herramientas para desarrolladores web de Chrome y ver cómo se solicita el archivo .js. En el otro lado, puede verificar los registros en el servidor web que sirve el archivo .js si hay algún archivo que no haya encontrado errores.
La función require
sería proporcionada, por ejemplo, por require.js , pero aún necesitaría configurar las rutas a sus scripts correctamente para que funcione.
Yo uso jspm.
Agrega esto:
import ''btford/angular-socket-io/mock/socket-io'';
escriba el código del lado del servidor en el archivo socket.io.js y pruebe src = "/ socket.io/socket.io.js"
Espero que esto solucione tu problema