如何在socketio事件发生时提供html代码?

时间:2018-06-04 18:30:51

标签: flask flask-socketio

如果发生任何SocketIO事件,我正在尝试提供 HTML 代码,所以不要这样做:

$(document).ready(function(){

    var notification_back = '/notifications';
    var callback = 'http://' + document.domain + ':' + location.port + notification_back;
    var socket = io.connect(callback);

    socket.on('new_test_event', function(data){
    var testList = $('#new_test_list');
    testList.prepend(
        '\
            <li>\
                <a href="'+data.url_to+'">\
                    <div class="user-new">\
                        <p>'+data.title+'</p>\
                        <span>'+moment(data.timestamp).fromNow()+'</span>\
                    </div>\
                    <div class="user-new-left">\
                        <i class="fa fa-rss"></i>\
                    </div>\
                    <div class="clearfix"> </div>\
                </a>\
            </li>\
        '
    )
    console.log(data);
});

我更愿意从后端提供html代码,所以像这样:

@socketio.on('new_test_event', namespace='/notifications')
def raise_new_attack(data):
    return Markup("THE HTML CODE GOES HERE")

有没有办法让这项工作?或者它不可能?!

1 个答案:

答案 0 :(得分:1)

这不是SocketIO的工作原理,你似乎试图让SocketIO适应HTTP的工作方式,所以也许你应该考虑SocketIO是否是你想要的。

从SocketIO事件返回HTML没有任何问题,但您需要在接收HTML的客户端上添加一些JavaScript并将其插入页面中的正确位置。

以下是返回HTML的事件示例:

composer network ping -c alice@trade-network

然后在客户端你会得到这样的东西:

@socketio.on('new_test_event', namespace='/notifications')
def raise_new_attack(data):
    emit("my_notification", "THE HTML CODE GOES HERE")