web-dev-qa-db-ja.com

socket.io-ReferenceError:ioは定義されていません

Android 2.3.5用のアプリケーションを作成しています(iOSとも互換性があります)。アプリのHTML/Javascriptからサーバー上のPythonプログラム(Twistedエンジンを使用してデータを取得する)にデータを転送したい。

私は多くのことを試してみましたが、さまざまなフォーラム、回答、チュートリアル、およびWebページ(ここではそれらのほとんどを含む)を調べましたが、回答が見つかりません。 index.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フォルダーをasset/wwwに配置します。このフォルダーには、他のJavaScriptソースが必要です。これは、index.htmlファイルがある場所でもあります。多くのサイトでは_<script src="/socket.io/socket.io.js"></script>_を使用していますが、これは意味がありません。多くのサイトではnode.jsの使用も暗示していますが、どこにも見当たりません。

この作業を行うにはどうすればよいですか?

返信の編集:

Chromeで試してみたところ、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_。

31
Ness

私は、socket.io

/socket-lib/socket.io.js

http://yourwebsite.com:12345/socket.io/socket.io.js

サーバーが残りを自動的に行います。

55
Ness

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

6
shacharsol

require.js を使用して他の多くのライブラリでsocket.ioを動作させると、同じエラーが発生しました。同じ/ jsからsocket.io.jsファイルをロードしようとしたために発生したことが判明しました他のファイルの残りよりもフォルダ。

それを別のフォルダに配置し、私のために修正すると、この要点のコードを見ることができますが、動作させるために変更したのはこれだけです:

の代わりに:

socketio: 'socket.io'、

つかいます:

socketio: '../socket.io/socket.io'、

この振る舞いの理由についてはわかりませんが、それがあなたの役に立つことを願っています。

1
guerrerocarlos

socket.io.jsファイルにサーバー側コードを記述して、src = "/ socket.io/socket.io.js"を試してください。

これがあなたの問題を解決することを願っています

1
Sudhakar P

これは、ブラウザがsocket.io.jsファイルを見つけられないようです。 Firefox + FirebugまたはChrome Web Developer Toolsを使用してコンピューターでindex.htmlを開いて、.jsファイルがどのようにリクエストされているかを確認できます。反対側では、ファイルが見つからないエラーがあるかどうかにかかわらず、.jsファイルを提供するWebサーバーにログオンします。

require関数は、たとえば RequireJS 、ただし、スクリプトが機能するためには、スクリプトへのパスを正しく構成する必要があります。

0
Stefan Seemayer

非常に役立つ提案をすべてデバッグした後、私にとっては、ノードサーバーが停止しただけであることがわかりました。開発中にターミナルウィンドウで手動で実行していました。

ノード[yourservercode] .jsが指定されたポートで実行されていることを確認してください! :-]

0
Tim T

私はこれをなんとか失敗し、非常に基本的なエラーであることが判明したものについて約1時間浪費しました。

関数が定義されていない場合「Uncaught ReferenceError:io is not defined」など。関数が「作成」される前に「使用」されているという意味ではありませんか?

Javascriptファイルを「呼び出す」HTMLファイルの一部では、lookedのようになります。

<script src='./js/playerChatter.js'></script> <!-- this one calls io -->
<script src="http://localhost:2019/socket.io/socket.io.js"></script><!-- This Creates io -->

and i changedこれに

<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

楽しむ!

0
Mat-e

Jspmを使用します。

これを追加:

import 'btford/angular-socket-io/mock/socket-io';
0
Vitaliy Demchuk