【问题标题】:Problem with updating html site dynamically with python / flask + ajax使用 python / flask + ajax 动态更新 html 站点的问题
【发布时间】:2021-08-18 18:24:23
【问题描述】:

我有一个带有文件 dropzone 的 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 站点显示“无”,当它应该在上传文件后打印“这里的东西”时。 这段代码有什么问题?

【问题讨论】:

  • 你检查过data有什么吗?
  • 没有,我该如何检查?
  • 如果你需要一个快速的答案,然后使用 console.log(data) 或者尝试在你的浏览器调试器中设置一个断点。例如对于丁目:developer.chrome.com/docs/devtools/javascript

标签: python html ajax flask


【解决方案1】:

问题是默认情况下您的路由接受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

【讨论】:

  • 您的解决方案没有任何反应。无保留无
  • 你可以返回记录器。在logger = "Something here" 之后做return logger,因为你ajax 接受它并用它更新div。让我知道它是否有效;我也更新了“解决方案”。
  • 我现在在重新加载页面时可以工作,但在删除文件后就不行了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-09
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多