【问题标题】:Node.JS: How to check if jQuery has loadedNode.JS:如何检查 jQuery 是否已加载
【发布时间】:2012-07-03 01:58:24
【问题描述】:

我使用了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?

编辑:

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>

【问题讨论】:

  • 你可以在node.js中使用jQuery吗?虽然没有 DOM 可以操作吗?
  • @JackBauer 你需要澄清一些你的问题。 jQuery 在哪里不起作用(浏览器或客户端)?问题代码来自哪里(可以是浏览器也可以是节点)。你想要实现什么(jQuery 应该存在于哪里)?
  • @elmigranto 道歉:我希望 jQuery 存在于我的 client.html 页面中。特别是,我想使用 jQuery 选择器来获取文本框的内容。然后 Socket.IO 会将消息传递给 server.js,然后将消息广播给所有连接的客户端。我正在编辑我的初始帖子以包含一些代码。
  • 也就是说,加载包以将它们存储在服务器上(通过 server.js 中的“require”)然后调用它们(使用 ) 在 client.html 中?

标签: jquery node.js npm


【解决方案1】:

如果我正确理解了这个问题,您只是想确保在 jQuery 加载并在浏览器上准备就绪之前不会将 socket.io 数据发送到 Web 浏览器吗?如果是这种情况,那么您所要做的就是在 html 中像往常一样添加引用 jQuery 的脚本标签,然后在 $(document).ready 中初始化 socket.io 客户端。类似于以下内容:

<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>

【讨论】:

  • 嘿蒂莫西——我所有的客户端 Socket.IO 代码都应该放在那个文档中吗?准备好了吗?谢谢!
  • 可以的。我不清楚您要解决什么问题。
【解决方案2】:

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

var jQuery = require('jQuery')

结帐docs 了解详情。


更新

关于问题更新。

您不需要npm install jquery 来使库在您的 HTML 页面中工作(因为其中的 javascript 将在用户的浏览器中执行,而不是在 Node 中执行)。您需要做的是在您的 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 作为网站后端的教程。

【讨论】:

  • 是的,我做到了。我不知道如何检查 jQuery 是否真的有效。我尝试在客户端引用它,但什么也没发生,这就是我对检查如此感兴趣的原因。
  • @JackBauer 有examplestests。如果您想知道 jQuery 是否加载到客户端...嗯,是的,因为 SocketIO 是您包含在 head 中的 javascript,对吗? (确定包含jQuery之后再做。)或者你可以在$(document).ready里面发起SocketIO-connection。
  • 没有证据表明客户端正在检测 jQuery。我在 $(function(){}); 中检查 jQuery,但没有任何反应。
  • @JackBauer 所以你用jQuery来检查jQuery是否有效?很有趣。
【解决方案3】:

如果jQuery 未定义,使用typeof jQuery == 'undefined' 不会崩溃,所以你可以使用这样的东西:

if (typeof jQuery == 'undefined') {  
    console.log('jQuery has not been loaded!');  
}
else {
    console.log('jQuery loaded!');
}

【讨论】:

  • 我实际上在 server.js 的顶部使用 jQuery = require('jQuery') 定义了它。但是,我不确定我的 jQuery 选择器是否真的在工作。
【解决方案4】:

您可以尝试检查 window.jQuery,该窗口应该存在,因此您应该得到 undefined。

我实际上会设置其他东西,虽然可能是这样的

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

然后,您可以根据需要在服务器上对其进行响应。

我对 socket.io 不是很熟悉,所以我怀疑可能有更好的方法,但这至少可以为您提供所需的信息。

【讨论】:

  • 是的,我得到 ReferenceError: window is not defined...这是什么意思?
  • 看看@elmigranto 的回答,我认为他理解了你想要做得更好的事情
【解决方案5】:

您正在查看变量 JQuery 是否存在,在您的代码中,您尚未定义变量 JQuery。 JQuery 不是变量,因此它不起作用。

【讨论】:

  • 啊哈。我将 var jQuery = require('jQuery') 放在 server.js 的顶部,if(jQuery) 返回 true,但是我猜这实际上并不表明我可以使用 jQuery?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-22
  • 2015-07-13
  • 2011-08-29
  • 2021-07-20
  • 1970-01-01
  • 2018-08-22
  • 2012-03-02
相关资源
最近更新 更多