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

How to serve html code when socketio event happens?

如果发生任何 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")

有什么方法可以实现吗?还是不可能?!

这不是 SocketIO 的工作方式,您似乎在尝试使 SocketIO 适应 HTTP 的工作方式,所以也许您应该考虑 SocketIO 是否是您想要的。

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

下面是一个事件返回的例子HTML:

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

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

socket.on("my_notification", function(html_code) {
    // use jQuery or similar to insert the html in the page
});