38

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 フォルダを 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.

4

9 に答える 9

71

のドキュメントの恐ろしい欠如に非常に混乱している人の答えを見つけましたsocket.io

を調達することはできません/socket-lib/socket.io.js

を調達する必要がありますhttp://yourwebsite.com:12345/socket.io/socket.io.js

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

于 2012-08-28T13:37:51.850 に答える
6

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 にあります。

于 2015-04-23T22:43:00.840 に答える
1

require.jsを使用してsocket.ioを他の多くのライブラリと連携させると、同じエラーが発生しました。これは、socket.io.jsファイルを同じ/ jsフォルダーからロードしようとしたことが原因であることが判明しました。ファイル。

別のフォルダーに配置して修正しました。この要点でコードを確認できますが、機能させるために変更したのは次のとおりです。

それ以外の:

socketio: 'socket.io',

使用する:

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

この動作の理由についてはわかりませんが、お役に立てば幸いです。

于 2012-09-06T05:11:15.457 に答える
0

これは、ブラウザが socket.io.js ファイルを見つけられないようです。Firefox+Firebug または Chrome Web 開発者ツールを使用してコンピューターで index.html を開いて、.js ファイルがどのように要求されているかを確認してみてください。一方、ファイルが見つからないというエラーがあるかどうか、.js ファイルを提供する Web サーバーのログを確認できます。

このrequire関数はRequireJSなどによって提供されますが、機能させるにはスクリプトへのパスを正しく構成する必要があります。

于 2012-08-16T21:14:04.993 に答える