Q&A
前提
socket.ioとsortableを用いて2人のユーザが同時に並べ替えを行えるようなプログラムを作成しています。1人のユーザが並び替えを行った際にもう1人のユーザの画面も更新するような機能を考えています。現在、socket.emitで並び替えた要素を配列にしてサーバに送信する処理を作成しているのですが、console.logで確認すると空の配列が返ってきてしまう問題が発生しています。
socket.emit('moveLayers', $("#sortable").sortable("toArray"));
の部分が正しく動作していないと考えられるのですが、解決方法を教えていただけないでしょうか。
実現したいこと
socket.emitで並び替えた配列の要素をサーバ側で取得したい
発生している問題・エラーメッセージ
サーバ側に正しく配列が送信されていない(空要素の配列になってしまっている)
該当のソースコード
Javascript(サーバサイド)
1const express = require('express'); 2const http = require('http'); 3const socketIo = require('socket.io'); 4 5const app = express(); 6const server = http.Server(app); 7const io = socketIo(server); 8 9const PORT = 3000; 10 11app.get('/', (req, res) => { 12 res.sendFile(__dirname + '/client.html'); 13}); 14 15server.listen(PORT, () => { 16 console.log(`listening on port ${PORT}`); 17}); 18 19io.on('connection', (socket) => { 20 console.log('connected'); 21 socket.on('moveLayers', function(layers) { 22 console.log(layers); 23 socket.broadcast.emit('moveLayer', layers); 24 }); 25 });
html(クライアントサイド)
1<!DOCTYPE html> 2<html> 3 <head> 4 <title>並べ替え問題</title> 5 </head> 6 7 8 <body> 9 10 11 <!-- jQuery --> 12 <script 13 src="https://code.jquery.com/jquery-3.6.0.js" 14 //integrity="sha256-H+K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk=" 15 //crossorigin="anonymous"></script> 16 17 <!-- jQuery UI --> 18 <script 19 src="https://code.jquery.com/ui/1.13.0/jquery-ui.js" 20 //integrity="sha256-xH4q8N0pEzrZMaRmd7gQVcTZiFei+HfRTBPJ1OGXC0k=" 21 //crossorigin="anonymous"></script> 22 <script src="/socket.io/socket.io.js"></script> 23 24 <script> 25 26 const socket = io(); 27 28 $(function() { 29 $('#sortable').sortable({ 30 update: function(event, ui) { 31 console.log(event,ui); 32 socket.emit('moveLayers', $("#sortable").sortable("toArray")); 33 } 34 }); 35 }); 36 37 socket.on('moveLayer', function(layers) { 38 $.each(layers, function() { 39 $("#"+this).appendTo("#sortable"); 40 }); 41 $("#sortable").sortable("refresh"); 42 }); 43 44 </script> 45 46 <ul id="sortable"> 47 <li >項目1</li> 48 <li>項目2</li> 49 <li>項目3</li> 50 </ul> 51 </body> 52</html>
回答1件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。