Jquery добавление данных json в html-таблицу

#python #jquery

#питон #jquery ( jquery )

Вопрос:

Мне нужно извлечь некоторые данные из базы данных MySQL с помощью приложения Flask и опубликовать их в HTML-таблице с помощью Jquery. Вот мой код на python:

 @app.route('/getTerm')
def getTerm():
    try:
        if session.get('user'):
            _userID = session.get('user')
 
            conn = mysql.connect()
            cursor = conn.cursor()
            cursor.execute("SELECT * FROM terms")
            conn.commit()
            terms = cursor.fetchall()
 
            terms_dict = []
            for item in terms:
                item_dict = {
                        'Id': item[0],
                        'Name': item[3],
                        'Definition': item[2],
                        'Status': item[1],
                        'User': item[4]}
                terms_dict.append(item_dict)
 
            return json.dumps(terms_dict)
        else:
            return render_template('error.html', error = 'Unauthorized Access')
    except Exception as e:
        return render_template('error.html', error = str(e))
    finally:
        cursor.close()
        conn.close()
 

Вот JS и HTML:

 <script>
    $(function(){
        $.ajax({
            url : '/getTerm',
            type : 'GET',
            success: function(res){
                var tr = $('<tr>')
    .append($('<td>')
        .attr('class', 'name'),
        $('<td>')
        .attr('class', 'definition'),
        $('<td>')
        .attr('class', 'user'),
        $('<td>')
        .attr('class', 'status'));
                                
                
                
                var termObj = JSON.parse(res);
                var term = '';
                var td = $('<td>')
                
                $.each(termObj, function(index, value){
                    term = $(tr).clone();
                    $(term).find('td').text(value.Name);
                    $(term).find('td').text(value.Definition);
                    $(term).find('td').text(value.User);
                    $(term).find('td').text(value.Status);
                    $('.terms').append(term);
                });
            },
            error: function(error){
                console.log(error);
            }
        });
    });
</script>

    <div class="main-terms">
        <div class="main-terms_buttons">
            <button><a href="/showAddTerm">Add term</a></button>
            <button><a href="/showAssigned">Assigned to me</a></button>
        </div>
        <div class="main-terms-table">
            <table class="terms">
            <tr>
                <th>Term</th>
                <th>Definition</th>
                <th>Assigned to</th>
                <th>Status</th>
            </tr>
            </table>
        </div>
    </div>
 

Однако на веб-странице я получаю таблицу, в которой значение «статус» отображается во всех ячейках. Не могли бы вы, пожалуйста, подсказать, что не так с моим кодом?

Ответ №1:

В вашем коде jquery вы добавляете все td в onces и используете .find('td') без какого-либо другого селектора, поэтому он нацелен на все td и изменяет значения. Вместо этого ориентируйтесь только на td, где вам нужно добавить значения, т.е. :

  //add to required tds using class..
    $(term).find('td.name').text(value.Name);
    $(term).find('td.definition').text(value.Definition);
    $(term).find('td.user').text(value.User);
    $(term).find('td.status').text(value.Status);
    $('.terms').append(term);
 

Комментарии:

1. Рад, что я помог 🙂 вы можете принять этот ответ