简体   繁体   English

使用带有socket.io的jQuery

[英]using jQuery with socket.io

I am trying to use jQuery in my socket.io js (index.js) file. 我正在尝试在我的socket.io js(index.js)文件中使用jQuery。

Whenever I try to do 每当我尝试去做

<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="/socket.io/socket.io.js"></script> 
<script src="index.js"></script>
<script>
  var socket = io();
  $('form').submit(function(){
    socket.emit('chat message', $('#m').val());
    $('#m').val('');
    return false;
  });
  socket.on('chat message', function(msg){
    $('#messages').append($('<li>').text(msg));
  });
  socket.on('new user', function(data){
    $('#newUserMessage').text(data);
  });        
</script> 

I get this error in my console 我在控制台中收到此错误

GET http://localhost:3000/index.js 

ReferenceError: $ is not defined

I'm not sure why this would happen? 我不确定为什么会这样?

But if I remove it I cant use jQuery's functions in index.js? 但是,如果我将其删除,则无法在index.js中使用jQuery的功能?

My index.js file 我的index.js文件

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

var $usernameInput = $('.usernameInput');

app.get('/', function(req, res){
  res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket){
  socket.broadcast.emit('new user', 'New User Joined, Say Hi :D');
  socket.on('chat message', function(msg){
    io.emit('chat message', msg);
  });
});

http.listen(3000, function(){
  console.log('listening on *:3000');
});

function setUsername () {
  username = cleanInput($usernameInput.val().trim());

  if (username) {
    socket.emit('add user', username);
  }
}

You are a little confused, you have your front end and you have your back end. 您有些困惑,您拥有前端,而您拥有后端。

Your index.js is your back end, you run that using NodeJS and you don't try to use jQuery on your back end, there's no DOM to manipulate. index.js是您的后端,您可以使用NodeJS运行该后端,而无需尝试在后端使用jQuery,因此无需操作DOM。 Also you don't include index.js on your front end, that's back end code. 另外,您在前端不包括index.js ,这是后端代码。

This is wrong: 这是错误的:

var $usernameInput = $('.usernameInput');

You can't access your DOM to get that value you have to send it to the back end, with some kind of event like this: 您无法访问DOM来获取该值,而必须将其发送到后端,并且需要发生类似以下事件:

Front end 前端

<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="/socket.io/socket.io.js"></script> 
<script>
  var socket = io();
  $('form').submit(function(){
    socket.emit('chatMessage', $('#m').val());
    $('#m').val('');
    return false;
  });
  socket.on('connect', function(){
    socket.emit('setUser', $('.usernameInput').val().trim());
  });
  socket.on('chatMessage', function(msg){
    $('#messages').append($('<li>').text(msg));
  });
  socket.on('newUser', function(data){
    $('#newUserMessage').text(data);
  });        
</script>

Back end 后端

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
  res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket){
  socket.broadcast.emit('newUser', 'New User Joined, Say Hi :D');
  socket.on('setUser', function(username){
    console.log(username); //here you have your user name
  });
  socket.on('chatMessage', function(msg){
    io.emit('chatMessage', msg);
  });
});

Here is My code for socket IO 这是我的套接字IO代码

<script>
    var socket = io.connect('<?php echo $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['SERVER_NAME'] . ":8000" ?>');
    console.log("tests" + socket);
    socket.on('connect', function () {

    });
    socket.on('call_admin_notification', function (data) {
        getAdminNotification();
    });       

</script>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM