Проблема с динамическим обновлением html-сайта с помощью python / flask ajax

#python #html #ajax #flask

Вопрос:

У меня есть файл приложения python/flask с зоной выпадения файла
, я запускаю функцию из другого файла py после загрузки файла.
Теперь мне нужно распечатать строку, когда файл будет загружен на веб-сайт
, это часть файла приложения:

 logger = None

@app.route('/',methods=['POST','GET'])

def upload():
    
    if request.method == 'POST':
        f = request.files.get('file')
        f.save(os.path.join(app.config['UPLOADED_PATH'],f.filename))
        es.main() 
        global logger
        logger = "something here"
    return render_template('index.html', logger=logger)
 

Это html-файл:

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script>

$(function(){
  window.setInterval(funtion(),{
  loadNewLogger() 
}, 100)

function loadNewLogger(){

  $.ajax({
    url:"/",
    type: "POST",
    datatype: "text",
    success: function(data){
      $(update_logger).replaceWith(data)
    }
  });
}
});


</script>
<body>
    <div style="color:rgb(0, 0, 0);text-align:center"> 
    NAME </div>
  
  {{ dropzone.create(action='upload') }}
  {{ dropzone.load_js() }}
  {{ dropzone.config() }}
  

  <div id="update_logger">
    {{ logger }}
  </div>
 

Проблема в том, что ничего не происходит. HTML — сайт показывает «Нет», когда он должен напечатать «что-то здесь» после загрузки файла.
Что не так с этим кодом?

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

1. Вы проверили, что у data него есть ?

2. нет, как я могу это проверить?

3. если вам нужен быстрый ответ на этот вопрос, используйте console.log(данные) или попробуйте установить точку останова в отладчике браузера. например, для chome: developer.chrome.com/docs/devtools/javascript

Ответ №1:

Проблема в том, что по умолчанию ваш маршрут принимает GET запрос. Поэтому всякий раз, когда вы делаете get, он запускается напрямую return render_template('index.html', logger=logger) ; но на этот раз вы видите, что у него нет доступа к линии logger = "something here" . Это означает, что строка никогда не выполняется при наличии GET запроса, следовательно, значение logger остается None . Что вы могли бы сделать, так это добавить return logger

 logger = None

@app.route('/',methods=['POST','GET'])

def upload():

    if request.method == 'POST':
        f = request.files.get('file')
        f.save(os.path.join(app.config['UPLOADED_PATH'],f.filename))
        es.main() 
        global logger
        logger = "something here"
        return logger

    return render_template('index.html', logger=logger)
 

Убедитесь, что вы импортируете url_for() from flask import url_for

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

1. С вашим решением ничего не происходит. Никто не остается, Никто

2. Тогда вы можете вернуть регистратор. После logger = "Something here" того return logger , как вы это сделаете, ajax возьмет его и обновит им div. Дайте мне знать, если это сработает; Я также обновил «решение».

3. Я работаю сейчас, когда перезагружаю страницу, но не после удаления файлов