HTTP POST后,Flask不更新页面

时间:2018-04-17 17:29:26

标签: python html css ajax flask

在POST请求后,我无法让Flask向HTML页面添加文本。 POST返回一个200代码,表示它已经通过,当我点击按钮时,我会在终端中看到它。另外,我看到在单击按钮时打印了request.data,因此看起来python代码输入了' POST'请求,但它永远不会使用结果文本呈现模板。有什么想法吗?

HTML:

<button onclick="do_ajax()">Do Ajax</button>
<p>{{result}}</p>

JavaScript的:

function do_ajax() {
  var req = new XMLHttpRequest();
  req.open("POST", "/index/", true);
  var blob = new Blob(['abc123'], {type: 'text/plain'});
  req.send(blob);
}

Flask / Python:

@app.route('/<string:index>/', methods=['GET','POST'])
def my_form_post(index):
  if request.method == 'POST':
    print request.data
    return render_template('%s.html' % index, result = "It's working!")
  elif request.method == 'GET':
    return render_template('%s.html' % index)

1 个答案:

答案 0 :(得分:0)

您正在发送请求,但在您的客户端发送请求后,您并没有真正做任何事情。您应该渲染响应烧瓶将您送回客户端。请注意,通常您不使用ajax来呈现整个页面,而是使用服务器发回的值来使用JSON格式填充页面上现有元素中的内容。

这是一个可以让你前进的片段:

<h2 onclick="do_ajax()"> click here</h2>
<script>
function do_ajax() {
  var req = new XMLHttpRequest();
  req.onreadystatechange = function() {
    if (req.status == 200) {
        alert(req.responseText);
    }else{
        alert(req.status);
    }
  };
  req.open("POST", "/index/", true);
  var blob = new Blob(['abc123'], {type: 'text/plain'});
  req.send(blob);
}
<script>