伸缩自如的Flask [day 8] ajax with jquery

在[day 7]使用form tag 来进行submit的时候,不知道大家心里会不会有个疑问?
我要是不想要跳页呢?我要是有10个form,我真的会写11个html吗?我能不能在同一个页面Post资讯,
同时获得结果,也许你可以考虑用ajax来将input的值进行传送。

https://github.com/wilsonsujames/flask_tutorial/tree/main/flask_ajax

在index.html 221行开始:

<div class="form-group">
  <label for="theName">Name:</label>
  <input type="text" class="form-control" id="theName" >
</div>
<div class="form-group">
  <label for="thefood">Food:</label>
  <input type="text" class="form-control" id="thefood">
</div>
<button id='testBTN' type='button'>testButton</button>     

可以看到这里有两个input及一个button按钮,
注意
请一定要加上type='button'这个属性,否则按钮有可能会因为不知道自己的type为submit还是button,而发生後续程序行为上的分歧。

在238行的部分,可以看到我们用Jquery来回传时,要加上:

<script type=text/javascript>
  $SCRIPT_ROOT = {{ request.script_root|tojson|safe }};
</script>

接着看到重点ajax的部分:

<script language="javascript" type="text/javascript">
$('#testBTN').click(
  function() {
var form_data = new FormData();
form_data.append('theName', $("#theName").val());
form_data.append('thefood', $("#thefood").val());
// form_data.append('xxx', $("#xxx").text());
//附带text也是可以的
$.ajax({
      type: "POST",
      url: $SCRIPT_ROOT + "/route_function",
      data: form_data,
      success: (data) => {
        console.log(data.validate);

        alert(data.validate)
        alert(data.Rtnfood)
        //也可以用jquery来呈现结果
      },
      contentType: false,
      processData: false,
      dataType: "json"
    });
}
);
</script>

我们将input的值塞进form的物件form_data,利用POST的方式带到route为"/route_function"的function。

@app.route('/route_function',methods=[ "GET",'POST'])
def route_function():
    theFood = request.form.get('thefood')
    print(theFood)
    return jsonify({'validate': 'formula success','PayAmount':1500,'Rtnfood':theFood})

注意
搭配jquery ajax的function回传一定要是json形式。

好的现在当回传成功时,我们将data.Rtnfood给alert出来,确定回传成功。
https://ithelp.ithome.com.tw/upload/images/20210514/20122678hjiahwLKUf.png

这辈子没想过可以在家工作,而且可以长达三个礼拜。


<<:  NIST SDLC和RMF(续)-PartII

>>:  从 RFC 规格书观点解析 OAuth 2.0

[Day 29] - Gatsby v.s. Next

终於来到尾声了,今天我们将对 Next.js 来做一番介绍,介绍完後,我们会跟这二十九天来的战友 G...

Day 10 利用 Cloudflare 来管理你的网域和子网域

将你所购买的网域名称,透过 Cloudflare 来设定 DNS 的好处多多。除了可以预防一些基本的...

菜鸡的机器学习入门

Python基础教学(一) 前言 Python相对於C或C++,算是容易上手的语言,有一个理由是因为...

Day15:Channel 的第一堂课

在前面的文章中,我们介绍了 coroutine 的基本原理,如何使用 launch 、 async ...

Day1- 什麽是P5

缘由 p5 是由 Processing 延伸而成的 JavaScript 函式库,Processin...