Переменные не меняются после ajax

Есть такие шаблоны flask:

base.html co всеми необходимы библиотеками:

<!DOCTYPE html>
<html lang="en">

<head>
            ...
</head>
<body>
            ...
    <div class="container">
      {% block content %}{% endblock %}
    </div>
            ...
</body>
</html>

sent_outter.html:

{% extends 'base.html' %}
{% block content %}
{{ super() }}

...некоторый контент
...некоторый контент

<div id="sent_outter">
    {% include 'sent_inner.html' %}
</div>
<button id="new_sent" type="submit" class="btn">Новый контент в sent_inner</button>
{% endblock %}

sent_inner.html:

<div id="sent_inner">
    <div id="target_w_r" class="d-none">{{ target_w_r }}</div>

    <div class="row-cols-auto">
        {% for w_r in target_list_r %}
        <button type="button" class="btn btn-source">
            {{ w_r }}
        </button>
        {% endfor %}
    </div>    
</div>

Далее main.py:

@app.route('/sent')
def sent():
    ...
    target_w_r = ...
    target_list_r = ...(список слов для кнопок ".btn-source")
    ...

    variables = {
        'target_w_r':  target_w_r, 'target_list_r': target_list_r
    }

    return render_template('sent_outter.html', **variables)

ajax.js:

$(function () {
  $("#new_sent").on("click", function (e) {
      e.preventDefault();
      $("#sent_outter").load("/sent #sent_inner")
    });
});

sent.js:

$(function () {
    var target_w_r = $("#target_w_r").text();
    var text_r_array = target_w_r.trim().split(" ");
      
    $("#sent_outter").on("click", ".btn-source", function () {
      var value = $(this).text().trim();
      var r_idx = text_r_array.indexOf(value);
      ...
      ...
      }
    ...
    ...
});

Проблема заключается в том, что при обновлении шаблона sent_inner (через ajax.js), переменные target_w_r и, соответственно, text_r_array (sent.js) не обновляются. При отладке в chrome при нажатии любой кнопки ".btn-source" переменная target_w_r останется старая (которая была до применения ajax.js). Текст на кнопках меняется правильно, и value (sent.js) также (я так понимаю, потому, что он берется из py-файла). А вот переменная r_idx (sent.js) не меняется. При обновлении страницы этого не происходит и скрипт sent.js отрабатывает правильно. Я понимаю, что при использовании AJAX не весь DOM перестраивается, а только часть страницы, которая была запрошена через AJAX. Но у меня не получается сделать правильно. Прошу помощи в решении.


Ответы (1 шт):

Автор решения: МОЙДОЫР

⛔ Вероятно, этот ответ создан с использованием ChatGPT.

✅ Этот ответ является корректным, однако непонятно, действительно ли решаемая проблема совпадает с описываемой в вопросе.

Предполагаю, что проблема заключается в том, что когда вы обновляете шаблон sent_inner через AJAX, он загружается из кэша браузера, и переменные, определенные в контексте шаблона при первоначальной загрузке страницы, не обновляются.

Чтобы решить эту проблему, вы можете добавить параметр timestamp к URL-адресу, который вы загружаете через AJAX, чтобы заставить браузер загрузить свежую версию файла, а не использовать кэшированную версию.

Измените эту строку в ajax.js:

$("#sent_outter").load("/sent #sent_inner")

на эту:

$("#sent_outter").load("/sent?_=" + new Date().getTime() + " #sent_inner")

Таким образом, мы добавляем временную метку в виде _=timestamp к URL-адресу, чтобы заставить браузер загрузить свежую версию страницы при каждом запросе.

Это должно решить проблему обновления переменных при загрузке шаблона sent_inner через AJAX.

→ Ссылка