2

を使用し、 jQuery が存在するかどうかを確認するnpm install jqueryために、次のコードを入れました。server.js

io.sockets.on('connection', function(socket) {

    console.log("Connection " + socket.id + " accepted.");

    // Check if jQuery is loaded
    if (jQuery) {  
        console.log("jQuery loaded!");
    }
    if (typeof jQuery == 'undefined') {  
        console.log('jQuery has not been loaded!');  
    }

});

を実行するserver.jsと、 が得られReferenceError: jQuery is not definedます。

jQuery がロードされているかどうかを確認するより良い方法はありますか? それとも、このメッセージは jQuery が正常にインストールされていないことを意味しますか?

編集:

client.html

<body>

<script>
    function send() {
        var user_message = $("#message_box").val();
        socket.send(user_message);
    };
</script>

<input id="message_box" type="text" placeholder="Message" />
<button id="sender" onClick='send()'/>Send Message</button>

</body>
4

5 に答える 5

4

これは Web ブラウザではありません。jQueryrequireモジュールを作成し、自分で変数を定義する必要がありjQueryます (SocketIO の場合と同様)。

var jQuery = require('jQuery')

詳細については、ドキュメントをご覧ください。


更新

質問の更新について。

ライブラリを HTML ページで動作させる必要はありませんnpm install jquery(これらの JavaScript はノードではなくユーザーのブラウザで実行されるため)。必要なことは、次のように HTML ドキュメントにリモート スクリプトを含めることです。

<html>
  <head>
    <!-- Embedd jQuery into HTML page to make it available in browser -->
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <script>
      // So, browser now knows about jQuery, but don't know about anything in <body>
      // We should wait, untill page will be fully loaded, and only then
      // read html input values, initiate connections, etc.
      $(function() {
        // this code will be executed after DOM is ready
        send();
      });

      // here is your send function
      function send() {
        var user_message = $("#message_box").val();
        socket.send(user_message);
      };
    </script>

  </head>
<!-- ... -->

IMO、クライアント側のJavaScriptプログラミングに関するいくつかのチュートリアルを実際に実行する必要があります(jQueryの有無は関係ありません)。次に、Node をサイトのバックエンドとして使用するためのチュートリアルを参照してください。

于 2012-07-02T16:15:37.067 に答える
0

質問を正しく理解している場合は、 jQuery がロードされてブラウザーで準備が整うまで、socket.io データを Web ブラウザーに送信していないことを確認しようとしているだけです。その場合は、通常のように jQuery を参照する script タグを html に追加し、 で socket.io クライアントを初期化するだけです$(document).ready。次のようなもの:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="socket.io/socket.io.js"></script>
<script>
    $(document).ready(function() {
        var socket = io.connect('http://localhost');
        socket.on('news', function (data) {
            $('#news').append(data);
        });
    });
</script>
于 2012-07-04T09:04:37.723 に答える
0

変数 JQuery が存在するかどうかを確認しようとしていますが、コードでは変数 JQuery を定義していません。JQuery は変数ではないため、機能しません。

于 2012-07-02T16:12:06.497 に答える
0

window.jQuery を確認してみてください。ウィンドウが存在するはずなので、代わりに undefined を返す必要があります。

私は実際には何か他のものを設定しますが、おそらく次のようなものです

$(function () {
  Console.log( 'jQuery loaded');
});

その後、必要に応じてサーバー上でそれに応答できます。

私は socket.io にあまり詳しくないので、もっと良い方法があるのではないかと思いますが、少なくとも必要な情報は得られるでしょう。

于 2012-07-02T16:13:15.343 に答える
0

が未定義の場合、使用してtypeof jQuery == 'undefined'もクラッシュしないjQueryため、次のようなものを使用できます。

if (typeof jQuery == 'undefined') {  
    console.log('jQuery has not been loaded!');  
}
else {
    console.log('jQuery loaded!');
}
于 2012-07-02T16:16:07.363 に答える