前端与后端的数据交互,最经常使用的就是GET、POST,比较经常使用的用法是:提交表单数据到后端,后端返回json前端
# GET请求 var data = { "name": "test", "age": 1 }; $.ajax({ type: 'GET', url: /your/url/, data: data, # 最终会被转化为查询字符串跟在url后面: /your/url/?name=test&age=1 dataType: 'json', # 注意:这里是指但愿服务端返回json格式的数据 success: function(data) { # 这里的data就是json格式的数据 }, error: function(xhr, type) { } });
# POST请求 var data = {} # 若是页面并无表单,只是input框,请求也只是发送这些值,那么能够直接获取放到data中 data['name'] = $('#name').val() # 若是页面有表单,那么能够利用jquery的serialize()方法获取表单的所有数据 data = $('#form1').serialize(); $.ajax({ type: 'POST', url: /your/url/, data: data, dataType: 'json', # 注意:这里是指但愿服务端返回json格式的数据 success: function(data) { # 这里的data就是json格式的数据 }, error: function(xhr, type) { } });
注意:
A)参数dataType:指望的服务器响应的数据类型,能够是null, xml, script, json
B)请求头中的Content-Tpye默认是Content-Type:application/x-www-form-urlencoded
,因此参数会被编码为 name=xx&age=1 这种格式,提交到后端,后端会看成表单数据处理jquery
若是要给后端传递json数据,就须要增长content-type参数,告诉后端,传递过来的数据格式,而且须要将data转为字符串进行传递。实际上,服务端接收到后,发现是json格式,作的操做就是将字符串转为json对象。
另外,不转为字符串,即便加了content-type的参数,也默认会转成 name=xx&age=1,使后端没法获取正确的jsonajax
# POST一个json数据 var data = { “name”: "test", "age", 1 } $.ajax({ type: 'POST', url: /your/url/, data: JSON.stringify(data), # 转化为字符串 contentType: 'application/json; charset=UTF-8', dataType: 'json', # 注意:这里是指但愿服务端返回json格式的数据 success: function(data) { # 这里的data就是json格式的数据 }, error: function(xhr, type) { } });
name = request.args.get('name', '') age = int(request.args.get('age', '0'))
接收表单数据json
name = request.form.get('name', '') age = int(request.form.get('age', '0'))
接收Json数据后端
data = request.get_json()
另外,若是前端提交的数据格式不能被识别,能够用
request.get_data()
接收数据。
微信公众号后台接收微信推送的xml格式的消息体,就能够用request.get_data()
来接收服务器
Flask能够很是方便的返回json数据微信
from Flask import jsonify return jsonify({'ok': True})
看一下源码就能够知道,jsonify就是帮咱们作了点添加mimetype这样的琐事,因此若是不嫌麻烦和难看,你也能够这样写app
# 太丑了,仍是别这么干了 return Response(data=json.dumps({'ok': True}), mimetype='application/json')
放两张截图来直观看一下请求post