Я пишу приложение для 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 в assets/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
.
Я нашел ответ для всех, кто впал в замешательство из-за ужасного отсутствия документации по socket.io
.
Вы не можете использовать источник /socket-lib/socket.io.js
,
вы должны использовать http://yourwebsite.com:12345/socket.io/socket.io.js
.
Сервер автоматически сделает все остальное за вас.
Я решил это сам путем изменения index.html чтобы импортировать клиентский сокет Ио из 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
Когда я заставил socket.io работать со многими другими библиотеками с помощью require.js, у меня возникла та же ошибка, которая, как оказалось, была вызвана тем, что я пытался загрузить файл socket.io.js из той же папки /js, что и остальные файлы.
Поместив его в отдельную папку, я исправил это, вы можете увидеть код в этом gist но все, что я изменил, чтобы заставить его работать, было следующее:
вместо:
socketio: 'socket.io',
Используйте:
socketio: '../socket.io/socket.io',
Не уверен в причине такого поведения, но надеюсь, что это вам поможет.
Для меня после отладки все очень полезные советы, это оказалось просто, что мой узел был остановлен. Я был запускать его вручную в окне терминала во время разработки.
Убедитесь, что ваш узел [yourservercode].JS-это работает на указанном порту! :-]
Мне удалось наткнуться через это, и прогуляли около часа, на то, что оказался очень простые ошибки.
Когда функция не определена? Такие как " непойманные ReferenceError: Ио не определены и". Это не означает, что функция получает на "используется" и, прежде чем он есть "создал" и?
В моей 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 -->
Так вот вопрос, что "Ио" и, будь это объект или функция... на самом деле все созданные до его привыкать :Д
Получайте удовольствие!
Похоже, что ваш браузер не может найти файл socket.io.js. Вы можете попробовать открыть index.html на вашем компьютере с помощью Firefox+Firebug или Chrome Web Developer Tools и посмотреть, как запрашивается файл .js. С другой стороны, вы можете проверить журналы веб-сервера, обслуживающего файл .js, на наличие ошибок "файл не найден".
Функция require
может быть предоставлена, например, RequireJS, но вам все равно придется правильно настроить пути к вашим скриптам, чтобы она работала.
Я использую jspm.
Добавить это:
import 'btford/angular-socket-io/mock/socket-io';