node js socket io controller调用两次

时间:2018-06-07 08:11:12

标签: jquery node.js cakephp-3.0

目前尝试与CakePHP 3和节点js创建基本聊天,实际上两个用户之间的消息显示效果非常好

但问题是:

我发送一条消息,控制器被调用并发回一个答案,但是如果我发送另一条消息,控制器会被调用两次,然后是三次,依此类推,我需要重新加载页面以避免这种行为。

但是对于控制器的调用,消息不会以双倍或三倍的形式显示。

我该如何避免这种行为?

这是我的服务器

var server = require('http').createServer(server),
io = require('socket.io').listen(server),
fs = require('fs');

moment = require('moment'); // librairie js pour la manipulation de date
moment.locale('fr'); // date en français

var date_format = moment(); // date actuelle
var date_comm = date_format.format('LL'); // mise en forme

// connexion / déconnexion
io.sockets.on('connection', function (socket) {
    // renvoi du commentaire
    socket.on('comm', function (data) {
        socket.broadcast.emit('commentaire', {
            auteurcomm: data.auteurcomm,
            comm: data.comm,
            avatar: data.avatar,
            date_comm: date_comm
        }); // renvoi aux autres et pas à moi
    });
});

server.listen(8083);

我的客户

var socket = io.connect('http://localhost:8083'); //create connection

$('#form_comm').submit(function(e){

  e.preventDefault();


    $.ajax({
            type: 'POST',
            url: '/instatux/commentaire/add',
            dataType: 'json',
            data: $('#form_comm').serialize(),

error: function(data)
{
    alert('fail');       
}

     });

    return false;

});



        $('#form_comm').submit(function () {

            var comm = $('#comm').val();

            var avatar = $('#avatar').val(); // champs caché contenant l'avatar

            var auteurcomm = $('#auteurcomm').val(); // champs caché contenant l'avatar

                    avatar = '/instatux/img/' + avatar;

 var avatarcomm = avatar.replace("/post", "");

      moment.locale('fr'); // date en français

var date_format = moment(); // date actuelle

var date_msg = date_format.format('LL'); // mise en forme

            socket.emit('comm', {comm: comm, avatar: avatarcomm, auteurcomm: auteurcomm}); // Transmet le message aux autres

                 $('#list_comm').prepend('<div class="comm"><img src="' + avatarcomm + '"alt="image utilisateur" class="img-thumbail left avatarcomm"/><a href="/instatux/' + auteurcomm +'" class="link_username_tweet">' + auteurcomm + '</a><span class="alias_tweet">@' + auteurcomm +'</span> - <span class="date_message">' + date_msg + '</span><p></p><p>' + comm +'</p></div>');

   $('#comm').val('');

        });




         // retour du server
           socket.on('commentaire', function(data) {

             $('#list_comm').prepend('<div class="comm"><img src="' + data.avatar + '"alt="image utilisateur" class="img-thumbail left avatarcomm"/><a href="/instatux/' + data.auteurcomm +'" class="link_username_tweet">' + data.auteurcomm + '</a><span class="alias_tweet">@' + data.auteurcomm +'</span> - <span class="date_message">' + data.date_comm + '</span><p></p><p>' + data.comm +'</p></div>');

        });

    // appuie sur la touche entrée       

  $("#comm").keypress(function(e) {
    if (e.which == 13) {

$('#form_comm').submit();


 }
 });

0 个答案:

没有答案