2

我用过npm install jquery,我把这段代码放在我的server.js里面来检查 jQuery 是否存在:

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?

编辑:

客户端.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

那不是网络浏览器,您应该自己使用requirejQuery 模块并定义jQuery变量(就像使用 SocketIO 一样)。

var jQuery = require('jQuery')

结帐文档以获取详细信息。


更新

关于问题更新。

您不需要npm install jquery使库在您的 HTML 页面中工作(因为其中的 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 是否存在,在您的代码中,您尚未定义变量 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

如果我正确理解了这个问题,那么您只是想确保在加载 jQuery 并在浏览器上准备好之前,您不会将 socket.io 数据发送到 Web 浏览吗?如果是这种情况,那么您所要做的就是在 html 中像往常一样添加引用 jQuery 的脚本标记,然后在$(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

Using typeof jQuery == 'undefined' will not crash if jQuery is undefined, so you could just use something like this :

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