Кнопка с полной реализацией фляги ajax абсолютно ничего не делает - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь использовать пользовательскую строку поиска в своем приложении фляги. Мне не удалось связать его с формой (или флягой-wtform) и сохранить ее анимацию. Поэтому я решил использовать ajax, который также очень заинтересован в работе с колбой. Моя проблема в том, что независимо от того, что я делаю, кнопка абсолютно ничего не делает!

HTML

{% block header %}
<div class="py-5 bg-image-full bgpic1">
  <img class="logotipo img-fluid d-block mx-auto" src="/static/img/cerveweb_inverted.png">
  <div class="searchBox">
    <input id="txtBusqueda" class="searchInput" type="text" placeholder="Buscar">
    <button id="btnBusqueda" class="searchButton">
      <i class="fas fa-search"></i>
    </button>
  </div>
</div>
{% endblock %}

Javascript

<script type="text/JavaScript">
  function buscar(){
    alert("2");
    var texto = $("#txtBusqueda").val();
    $.ajax({
      url: "{{url_for('buscar')}}",
      type: 'POST',
      data: {'data':texto},
      contentType: 'application/json;charset=UTF-8'      
    });
  };

  $("#btnBusqueda").click(function(){
    console.log("1");
    buscar();
  });  
</script>

Flask

@main.route('/buscar', methods=['GET', 'POST'])
def buscar():
    # Viene de un AJAX
    if request.method == "POST":
        texto = request.json['data']
        flash("Has buscado: {}".format(texto), "info")
    return render_template('index.html')

РЕДАКТИРОВАТЬ: Включение сценариев шаблона Jinja, расширяя функциональностьблок базового шаблона заставил его работать. Однако я запутался в этом, разве скрипты не должны выживать при рендеринге? enter image description here

Кроме того, по какой-то причине сейчас указывается, что это неверный запрос: enter image description here

Это текущийкод скрипта и колбы enter image description here

1 Ответ

0 голосов
/ 28 октября 2019

Похоже, что у flask нет хорошей совместимости с Ajax, вы должны переключиться на json для обработки запроса Ajax. В средних и больших моделях приложений с sqlalchemy это боль. Мой подход состоял в том, чтобы отобразить объекты sqlalchemy непосредственно в json-аналоги, используя ORM-зефир. Превращая приложение в смесь классической колбы-WTF и API отдыха. Я должен уточнить, что я сделал этот рефактор со временем как основным фактором, отдавая приоритет скорости над производительностью.

Есть некоторые довольно элегантные решения, которым не нужно такое сочетание, но я не мог остановиться, чтобы проанализировать их вглубина. Они просто не могли конкурировать с очень коротким количеством лишних строк кода, которые мне нужны. (около 3 на класс модели и 2 на вызов)

Однако мне не удалось ни при каких обстоятельствах заставить колбу правильно реагировать на переменные Ajax. Эта проблема была временно решена с помощью флеш-сессии, которая работает с талисманом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...