Как обслуживать HTML-код, когда происходит событие socketio? - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь обслуживать HTML код, если происходит какое-либо событие SocketIO, поэтому вместо выполнения:

$(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 голосов
/ 05 июня 2018

Это не так, как работает SocketIO, вы, кажется, пытаетесь адаптировать SocketIO к тому, как работает HTTP, поэтому, возможно, вам следует подумать, подходит ли вам SocketIO.

Нет ничего плохого в возврате HTML изСобытие SocketIO, но вам нужно будет добавить немного JavaScript на клиент, который получает HTML и вставляет его в правильное место на странице.

Ниже приведен пример события, возвращающего 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
});
...