烧瓶返回不适用于HTML代码中的post jQuery请求

时间:2020-10-31 20:01:06

标签: javascript python jquery flask datatables

我遇到一个问题,该问题是通过jquery帖子提交表单。我正在处理表单数据,需要提交特定的数据。由于无法使用dataTables插件提交多个页面,因此无法使用内置的POST,因此在提交之前必须修改javascript中的数据。下面的代码正在运行,因为正在执行'url_for('aws_execute')'中的代码,但该页面未在浏览器中加载。

因此,在此示例中,“ 123”将被打印到python控制台,但网站不会被重定向,并且“测试请工作”不会在浏览器中显示。

如果我在发布后执行某项功能,则能够获取诸如控制台日志或警报之类的信息,但是由于我想让一个新页面显示结果而不是我不知道如何重定向页面警报等。如何实现此目标的任何想法?

谢谢!

<!DOCTYPE html>
<html>
  <head>
    <title>Test</title>
      <link href="{{ url_for('static', filename='css/jquery.dataTables.min.css') }}" rel="stylesheet">
      <script src="{{ url_for('static', filename='jquery-3.5.1.js') }}"></script>
      <script src="{{ url_for('static', filename='jquery.dataTables.min.js')}}"></script>
      <script type="text/javascript" charset="utf-8">
      $(document).ready(function() {
          $('#options').on('submit', function(e){
              // Prevent actual form submission
              e.preventDefault();

              var data = table.$('input,select,textarea').serializeArray();
              var data2 = $(this).serializeArray();
              var data3 = $.merge(data,data2);

not working--->$.post({
                 url: '{{ url_for('aws_execute') }}',
                 data: data3

              },
              function(data3,status){
                     alert("Data: " + data3 + "\nStatus: " + status);
              });
          });

      } );
  </script>
  </head>

  <body>

<h1>AWS Options</h1>
<form id="options" method="POST" action="{{ url_for('aws_execute') }}">
  <button type="submit">Submit Form</button>
  (FORM STUFF)
</body>
</html>

在python中:

@app.route('/aws_execute', methods=['POST'])
@saml_manager.login_required
def aws_execute():
    print('123')
    return 'test please work'

3 个答案:

答案 0 :(得分:0)

由于它使用Java语言编写,因此您只需要简单地使用路由本身即可。无需使用url_for()。

$.post({
  url: '/aws_execute',
  data: data3
});

答案 1 :(得分:0)

$.post发出AJAX请求,因此不会自动呈现对此请求的任何响应。如果您打算让您的POST请求呈现响应,为什么不让表单遵循其默认行为(即摆脱所有jQuery)?

否则,如果要使其成为AJAX,则需要包含一个回调,以指定获取响应后如何处理响应中的数据。例如,尝试以下操作,看看它是否将test please work记录到您的浏览器控制台中:

$.post({
  '{{ url_for('aws_execute') }}',
  data3,
  responseData => console.log(responseData)
});

答案 2 :(得分:-1)

尝试以下操作:

from flask import render_template

@app.route('/aws_execute', methods=['POST'])
@saml_manager.login_required
def aws_execute():
    print('123')
    return render_template(url_for('aws_execute'))