【问题标题】:Ajax issue with FlaskFlask 的 Ajax 问题
【发布时间】:2017-06-08 22:52:42
【问题描述】:

在过去的几天里,我一直在尝试通过 ajax 调用来使用 Flask。无论我尝试什么都不起作用。所以我将直接进入我的代码:

Python 代码:

 @app.route("/num")
 def num():
     return render_template('num.html')

 @app.route('/add_num', methods=['POST'])
 def add_num():
    a = request.form['a']
    b = request.form['b']
    a = int(a)
    b = int(b)
    print(a)
    if a and b:
      c = a + b 
      return jsonify(result = c)
    return jsonify({'error' : 'Missing Data'})

HTML 代码

  <form>
     <input id='a' type="text" size="5" name="a"/> +
     <input id='b' type="text" size="5" name="b"/> =
     <br>
     <br>
     <button>Add It!</button>
  </form>

  <h1 id='result'>Result</h1>

Ajax 代码:

     <script type="text/javascript">
       $(document).ready(function(){
          $('form').bind('submit', function(event){
            $.ajax({
               data: {
                  a: $('#a').val(),
                  b: $('#b').val()
               },
               type: 'POST',
               url: '/add_num',
               dataType: 'json',
               data: JSON.stringify(json),
               contentType: 'application/json;charset=UTF-8'
           })
            .done(function(data){
              if (data.error){
                $('#result').text(data.error).show();
              }else{
                $('#result').text(data.result).show();
              }
           });
        event.preventDefault();
        });
       });
      </script>

当我点击提交按钮时,没有任何反应。我会在 URL 中看到这个: http://127.0.0.1:5000/num?a=2&b=3 此外,有一次我添加了数字,但被带到了显示 JSON 信息的单独页面。为了实现这一点,我的表单的第一行是这样的:

    <form action='add_num' method="post" role='form'>

现在我尝试使用不同格式的 ajax,它在我的代码中运行良好。但是,我想尝试这种方法,因为我更喜欢它。我相当确定解决方案很简单,但我无法找到它。任何帮助都会很棒!

这就是它最终为我工作的原因:

`  $(document).ready(function(){
     $('form').bind('submit', function(event){
        event.preventDefault();
           $.ajax({
               data: {
                  a: $('#a').val(),
                  b: $('#b').val()
           },
            type: 'POST',
            url: '/add_num',
            success: function(data){
            $('#result').text(data.result).show();
        }
     });
   });
  });`

【问题讨论】:

    标签: jquery ajax forms python-3.x flask


    【解决方案1】:

    event.preventDefault() 移到您的 ajax 调用上方。如果您在参数字符串中看到ab,则表示表单正在执行其默认操作。

    编辑:可能是您传递给$.ajax 的对象中有两个data 键,而在第二个data 键上您调用JSON.stringify 的变量似乎不存在作为参数存在。

    【讨论】:

    • 移到 ajax 调用之上会导致同样的事情。我什至不相信数据正在进入 Python 代码,因为我在代码中有一个 print(a) 并且没有任何内容打印到控制台。
    • 编辑了我的答案。
    • 是的,我注释掉了 JSON.stringify 部分,但仍然是同样的问题。谢谢你反馈艾莉。我一直在这上面花了大约 2 天时间,但不太确定问题是什么!就好像这种形式的 ajax 不起作用......这对我来说毫无意义。
    • 控制台打印没有错误?我会将debugger; 添加为submit 回调的第一行,并逐行执行。
    • 实际上我得到的唯一错误如下: TypeError: $(...).on is not a function[Learn More] 但直到现在我才认为这是一个问题-我正在观看有关此的 Youtube 视频,这与视频中的代码相同。看起来有问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 2019-08-14
    • 2019-11-22
    • 2018-05-07
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多