@matveyvarg

Почему redirect идет только после второго нажатия?

Код на клиенте :
$( document ).ready(function() {
   var socket = io();
   $('#create').click(function(){
      socket.emit('Create room',(socket.id).toString());
   });
   $('#join').click(function(){
   	  socket.emit('join',$('#roomID').val());	
   });
   socket.on('joined',function(){
   		window.location.replace("/room");
   });
});

Часть кода на сервере:
io.on('connection', function(socket){
  socket.on('Create room', function(msg){
    socket.emit('joined');
    room_id = ( Math.random() * 100000 ) | 0;
    listOfRooms.push(room_id);
    socket.join(room_id);
    console.log('Socket '+socket.id.toString()+' was connected to room '+room_id.toString());
    Conn[socket.id.toString()]=room_id;    
    });
  });

Почему то редирект на '/room' идет только после двух нажатий на кнопку create. А если вешать redirect на сам click, то его вообще не происходит.
Вот весь код: https://dropmefiles.com/gxLjL
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
@iShatokhin
JS developer
Вы не дожидаетесь событие коннекта. Вот вам для примера:

var socket = io(); // не стоит ждать загрузки всего документа, сокет должен успеть "открыться" к событию "document ready"

socket.on('joined',function(){
	window.location.replace("/room");
});

socket.on('connect', function () { // Вот теперь emit будет работать сразу
	$( document ).ready(function() {
		$('#create').click(function(){
			socket.emit('Create room',(socket.id).toString());
		});

		$('#join').click(function(){
			socket.emit('join',$('#roomID').val());	
		});
	});	
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы