【问题标题】:flask return not working with post jquery request in html code烧瓶返回不适用于html代码中的post jquery请求
【发布时间】:2020-10-31 20:01:06
【问题描述】:

我遇到了通过 jquery 帖子提交表单的问题。我正在处理表单数据,需要提交具体数据。我无法使用内置的 POST,因为没有使用 dataTables 插件提交多个页面,因此我必须在提交之前修改 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'

【问题讨论】:

    标签: javascript python jquery flask datatables


    【解决方案1】:

    由于它是在 Javascript 中,您只需要简单地使用路由本身。无需使用 url_for()。

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

    【讨论】:

      【解决方案2】:

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

      否则,如果您希望它是 AJAX,则需要包含一个回调来指定在您获得数据后如何处理响应中的数据。例如,试试这个,看看它是否将test please work 记录到您的浏览器控制台:

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

      【讨论】:

      • 该回调有效,但是我不确定如何让它转到下一页,因为我想做一些比警报或控制台日志更高级的事情。我不能只使用默认帖子,因为由于 dataTables 插件的问题,我需要操作表单数据。有什么建议吗?
      • 您可以在回调中包含window.replace(&lt;url&gt;)
      【解决方案3】:

      尝试以下方法:

      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'))
      

      【讨论】:

        猜你喜欢
        • 2020-06-17
        • 2020-09-13
        • 1970-01-01
        • 2016-08-17
        • 2019-05-27
        • 2014-07-23
        • 1970-01-01
        • 2018-08-27
        • 2023-04-03
        相关资源
        最近更新 更多