Подтвердить что ты не робот

Socket.io - ReferenceError: io не определен

Я пишу приложение для Android 2.3.5 (которое также будет совместимо с iOS). Я хочу передать данные из приложения HTML/Javascript в программу Python на сервере (который использует механизм Twisted для извлечения данных).

Я пробовал много вещей и смотрел различные форумы, ответы, учебники и веб-страницы, включая большинство из них здесь, и не могу найти ответ. Вот соответствующий Javascript, который у меня есть в файле 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

Если вы не можете сказать, я все еще довольно смущен, как это работает; Я ничего не могу проверить. Ошибка, которая продолжается, составляет ReferenceError: io is not defined. Некоторые сайты использовали что-то вроде var io = require('socket.io');. Но тогда это приводит к той же ошибке: ReferenceError: require is not defined.

Я помещаю папку socket-lib в активы /www, где должен идти любой другой источник Javascript. Это также файл index.html. Многие сайты используют <script src="/socket.io/socket.io.js"></script>, но это не имеет для меня никакого смысла. Многие сайты также подразумевают использование node.js, но я никогда его не вижу.

Как я могу сделать эту работу?

Ответные изменения:

Я попробовал его в Chrome, и он дал мне Uncaught ReferenceError: require is not defined для файла socket.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. Я посмотрел на веб-сайт, и мне это совсем не помогает. Когда я пытаюсь поставить "require" в качестве аргумента функции, возникает другая ошибка: TypeError: undefined is not a function.

4b9b3361

Ответ 1

Я нашел ответ для тех, кто очень сильно запутался в ужасной нехватке документации socket.io.

Вы не можете указать /socket-lib/socket.io.js,

вы должны указать http://yourwebsite.com:12345/socket.io/socket.io.js.

Сервер автоматически сделает все остальное для вас.

Ответ 2

Я сам решил это, изменив index.html, чтобы импортировать сокет io-клиента из bower, сначала я установил компонент 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

Ответ 3

Это похоже на то, что ваш браузер не может найти файл socket.io.js. Вы можете попробовать открыть index.html на своем компьютере с помощью Firefox + Firebug или инструментов веб-разработчика Chrome и посмотреть, как запрашивается файл .js. С другой стороны, вы можете проверять журналы на веб-сервере, обслуживающем файл .js, есть ли какие-либо файлы, не найденные ошибки.

Функция require будет предоставлена, например, RequireJS, но вам все равно нужно правильно настроить пути к вашим скриптам, чтобы они работали.

Ответ 4

При запуске socket.io работать со многими другими библиотеками, используя require.js У меня была такая же ошибка, она оказалась вызванной из-за пытаясь загрузить файл socket.io.js из той же папки /js, что и остальные другие файлы.

Поместив его в отдельную папку, исправьте его для меня, вы можете увидеть код в этом значении, но все, что я изменил, чтобы заставить его работать, было следующее:

вместо:

socketio: 'socket.io',

Использование:

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

Не уверен в причине такого поведения, но я надеюсь, что это поможет вам.

Ответ 5

Мне удалось промахнуться через это, и растратил около часа, на что-то, что оказалось очень простой ошибкой.

Когда функция не определена? Например, "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

У FUN!

Ответ 6

Для меня после отладки всех очень полезных предложений оказалось, что мой сервер node остановился. Я запускал его вручную в окне терминала во время dev.

Убедитесь, что ваш node [yourservercode].js запущен на указанном порту!: -]

Ответ 7

Я использую jspm.

Добавьте это:

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