2017-10-15 11 views
-1

플라시보 응용 프로그램에서 socketio를 사용하여 보낸 사람과 메시지의 이름을 표시하려고합니다. 그러나 여기에는 메시지 만 나타나며 보낸 사람의 이름은 브라우저에 "[object object] hello"만 표시합니다 .파이썬 플라스크 브로드 캐스트 메시지

**# server.py 

    from flask import Flask, render_template 
    from flask_socketio import SocketIO, emit 

    app = Flask(__name__) 

    app.config[ 'SECRET_KEY' ] = 'jsbcfsbfjefebw237u3gdbdc' 
    socketio = SocketIO(app) 

    @app.route('/') 
    def hello(): 
     return render_template('./index.html') 

    def messageRecived(): 
     print('message was received!!!') 

    @socketio.on('my event') 
    def handle_my_custom_event(json): 
     print('recived my event: ' + str(json)) 
     socketio.emit('my response', json, callback=messageRecived) 

    if __name__ == '__main__': 
     socketio.run(app, debug = True) 

index.html을

**

<form action="" method="POST"> 
    <b>Type your message below <span class="glyphicon glyphicon-arrow-down"></span></b> 
    <div class="clearfix" style="margin-top: 5px;"></div> 
    <div id="username">My Name</div> 
    <div style="padding-top: 5px;"></div> 
    <input type="text" class="message form-control" placeholder="Messages"> 
    <div style="padding-top: 5px;"></div> 
    <button type="submit" class="btn btn-success btn-block"><span class="glyphicon glyphicon-send"></span> Send</button> 
</form> 
</div> 
</div> 

**

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.min.js"></script> 
<script> 
    var socket = io.connect('http://' + document.domain + ':' + location.port) 
    // broadcast a message 
    socket.on('connect', function() { 
     socket.emit('my event', { 
     data: 'User Connected' 
    }) 
    var form = $('form').on('submit', function(e) { 
     e.preventDefault() 
     let username = $('#username').val() 
     let user_input = $('input.message').val() 
     socket.emit('my event', { 
      username : $("#username"), 
      message : user_input 
     }) 
     // empty the input field 
      $('input.message').val('').focus() 
     }) 
    }) 
    socket.on('my response', function(msg) { 
    console.log(msg) 
    if(typeof msg.username !== 'undefined') { 
     $('h1').remove() 
     $('div.message_holder').append('<div class="msg_bbl"><b style="color: #000">'+msg.username+'</b> '+msg.message+'</div>') 
     } 
    }) 
</script>** 
+0

원본 편집은 끔찍한 일입니다. 코드 블록 *을 따옴표가 아닌 코드 블록 *으로 포맷하십시오. – jonrsharpe

답변

0

대신 그 내용의 서버에 DOM 요소를 보내고있다. 실제 사용자 이름을 얻으려면 .text()을 추가하십시오.

socket.emit('my event', { 
     username : $("#username").text(), 
     message : user_input 
    })