json格式

双向!

前端 ==>后端:json格式

后端 ==>前端:json格式

html

<!-- html部分 -->
<form enctype='application/json' method="post">
<input type="text" name="username" placeholder="请输入用户名"/></br>
<input type="text" name="password" placeholder="请输入密码"/></br>
<button type="submit">登录</button>
</form> <!-- 用户列表,用于显示新增的用户 -->
<ol id="container"></ol> <!-- javascript部分 -->
<script>
var container = document.getElementById('container');
// 辅助函数:将一个新添加的用户(user),放入form的下方容器的尾部显示
var show_added_user = function (user) {
var li = document.createElement("li");
li.innerText = user["id"] + " " + user["username"] + ":" + user["password"];
container.appendChild(li);
}; // 将formData数据转换为json数据,版本一
var convert_FormData_to_json = function (formData) {
var objData = {};
for (var entry of formData.entries()){objData[entry[0]] = entry[1];}
return JSON.stringify(objData);
}; // 将formData数据转换为json数据,版本二(箭头语法)
var convert_FormData_to_json2 = function (formData) {
var objData = {};
formData.forEach((value, key) => objData[key] = value);
return JSON.stringify(objData);
}; var formobj = document.querySelector('form');
//var formobj = document.getElementByTag('form');
formobj.addEventListener('submit', function(event){
event.preventDefault(); var xhr = new XMLHttpRequest();
xhr.open('POST', '/users/'); xhr.setRequestHeader('Content-Type', 'application/json'); // (前端)声明json格式
xhr.send(convert_FormData_to_json(new FormData(formobj)));// (前端)发送json数据
xhr.addEventListener('loadend', function() {
if(xhr.status == 201){ // 201,去看app.py!!
var user = JSON.parse(xhr.responseText); // (前端)处理接收的json数据
show_added_user(user)
//users.map(show_added_user); // 如果返回users list,则可用map!!
}
}, false);
}, false);
</script>

app.py

# app.py
# 查询
@app.route('/users', methods=['GET'])
def show_user(user_id):
users = User.query.all()
return jsonify(users) # (后端)发送json数据 # 查询一个
@app.route('/users/<int:user_id>', methods=['GET'])
def show_user(user_id):
user = User.query.filter_by(id=user_id).first()
return jsonify(user) # (后端)发送json数据 # 添加
@app.route('/users/', methods=['POST'])
def add_user():
username, password = request.json['username'], request.json.get('password', "") # (后端)处理接收的json数据
user = User(username, password) # 自动多了id
db.session.add(user)
db.session.commit()
return jsonify(user), 201 # (后端)发送json数据

FormData格式

单向!

前端 ==>后端:FormData格式

后端 ==>前端:json格式

html

<!-- html部分 -->
<form enctype='application/x-www-form-urlencoded' method="post"> <!-- 编码传送 -->
<!-- 或者:<form enctype='multipart/form-data' method="post"> --> <!-- 不编码传送,特别是当包含文件上传控件时,必须用这个! -->
<input type="text" name="username" placeholder="请输入用户名"/></br>
<input type="text" name="password" placeholder="请输入密码"/></br>
<button type="submit">登录</button>
</form> <!-- 用户列表 -->
<ol id="container"></ol> <!-- javascript部分 -->
<script>
var container = document.getElementById('container');
// 辅助函数:将一个新添加的用户(user),放入form的下方容器的尾部显示
var show_added_user = function (user) {
var li = document.createElement("li");
li.innerText = user["id"] + " " + user["username"] + ":" + user["password"];
container.appendChild(li);
}; var formobj = document.querySelector('form');
//var formobj = document.getElementByTag('form'); formobj.addEventListener('submit', function(event){
event.preventDefault(); var xhr = new XMLHttpRequest();
xhr.open('POST', '/users/'); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // (前端)声明form格式 注意这里对应前面:application/x-www-form-urlencoded
xhr.send(new FormData(formobj)); // (前端)发送form数据
xhr.addEventListener('loadend', function() {
if(xhr.status == 201){ // 201,去看app.py!!
var user = JSON.parse(xhr.responseText); // (前端)处理接收的json数据
show_added_user(user)
//users.map(show_added_user); // 如果返回users list,则可用map!!
}
}, false);
}, false);
</script>

app.py

# app.py
# 查询
@app.route('/users', methods=['GET'])
def show_user(user_id):
users = User.query.all()
return jsonify(users) # (后端)发送json数据 # 查询一个
@app.route('/users/<int:user_id>', methods=['GET'])
def show_user(user_id):
user = User.query.filter_by(id=user_id).first()
return jsonify(user) # (后端)发送json数据 # 添加
@app.route('/users/', methods=['POST'])
def add_user():
username, password = request.form['username'], request.form.get('password', "") # (后端)处理接收的form数据
user = User(username, password) # 自动多了user_id
db.session.add(user)
db.session.commit()
return jsonify(user), 201 # (后端)发送json数据

flask前端与后端之间传递的两种数据格式:json与FormData的更多相关文章

  1. android fragment传递参数_fragment之间传值的两种方法

    在Activity中加载Fragment的时候.有时候要使用多个Fragment切换.并传值到另外一个Fragment.也就是说两个Fragment之间进行参数的传递.查了很多资料.找到两种方法.一种 ...

  2. Json传递数据两种方式(json大全)

    1.Json传递数据两种方式(json大全)----------------------------字符串 var list1 = ["number","name&quo ...

  3. [转]Angular2-组件间数据传递的两种方式

    本文转自:https://www.cnblogs.com/longhx/p/6960288.html Angular2组件间数据传递有多种方式,其中最常用的有两种,一种是配置元数据(或者标签装饰),一 ...

  4. Angular2-组件间数据传递的两种方式

    Angular2组件间数据传递有多种方式,其中最常用的有两种,一种是配置元数据(或者标签装饰),一种是用单例模块传递:有两个元数据具有传递数据的功能:inputs和outputs. 一.元数据传递 1 ...

  5. easyUI之datagrid绑定后端返回数据的两种方式

    先来看一下某一位大佬留下的easyUI的API对datagrid绑定数据的两种方式的介绍. 虽然精简,但是,很具有“师傅领进门,修行靠个人”的精神,先发自内心的赞一个. 但是,很多人和小编一样,第一次 ...

  6. 前端与后端之间参数的传递与接收和@RequestBody,@Requestparam,@Param三个注解的使用

    参数在前台通过对象的形式传递到后台,在后台,可以用@RequestBody注解通过Map或JSONObject接收(太麻烦,既要从Map中取值,取完值后又要封装到Map),也可以用@RequestPa ...

  7. python flask学习第2天 URL中两种方式传参

    新创建项目   自己写个url映射到自定义的视图函数 在url中传递参数 app.py from flask import Flask app = Flask(__name__) @app.route ...

  8. 前端向后端获取数据的三种方法:ajax、axios、fetch

    1.jQuery中的ajax get方法: $.ajax({ url:"v4/api/film/now-playing?t=1539401039415&page=1&coun ...

  9. 前端导出功能get和post两种方式

    get方式: var url = ’/sjdd/eventQuery/exportSuperviseEventExcel.do?beginDate=' + beginDate + '&endD ...

随机推荐

  1. SwipeRefreshLayout嵌套ScrollView实现下拉刷新

    API doc:http://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html 首先须 ...

  2. commons-pool 解析

    首先抛出个常见的长连接问题: 1  都知道连接MySQL的应用中大多会使用框架例如 c3p0 ,dbcp proxool 等来管理数据库连接池. 数据库连接池毫无疑问都是采用长连接方式. 那么MySQ ...

  3. OverAPI.com – 史上最全的开发人员在线速查手册

    不管你是多么优秀的程序员,你都不可能记住一切.在你编写程序的过程中碰到问题需要查阅手册的时候,若有现成的在线手册可参考则可以为你节省很多时间.为了方便各位朋友,我向大家推荐一个非常棒的在线手册索引网站 ...

  4. Node.js环境搭建和学习(windwos环境)

    Node.js环境搭建和学习 一.环境搭建 1.下载安装文件 下载地址http://nodejs-org.qiniudn.com/下载Node.js环境安装包,根据操作系统下载对应的安装包 下载地址 ...

  5. linux内核完全剖析——基于0.12内核-笔记(2)-统一编址和独立编址

    IO是什么 ? IO(Input and Output)是输入输出接口.是CPU和其他外部设备(如串口.LCD.触摸屏.LED等)之间通信的接口.一般的,我们说的IO就是指CPU的各种内部或外部外设. ...

  6. .Net 环境

    更多系统版本下载:https://www.microsoft.com/net/download VSCode :https://code.visualstudio.com/

  7. [Spark Core] Spark 在 IDEA 下编程

    0. 说明 Spark 在 IDEA 下使用 Scala  & Spark 在 IDEA 下使用 Java 编写 WordCount 程序 1. 准备 在项目中新建模块,为模块添加 Maven ...

  8. 【项目 · Wonderland】UML设计

    团队作业---UML设计 Part 0 · 简要目录 Part 1 · 团队分工 Part 2 · UML Part 3 · 工具选择 Part 1 · 团队分工 Part 2 · UML 描述信息: ...

  9. JAVA内存管理 [转]

    首先我们要明白一点,我们所使用的变量就是一块一块的内存空间!!   一.内存管理原理:   在java中,有java程序.虚拟机.操作系统三个层次,其中java程序与虚拟机交互,而虚拟机与操作系统间交 ...

  10. python第二十九课——文件读写(readline()和readlines()的使用)

    演示readline()和readlines()的使用: #1.打开文件 f3=open(r'a.txt','r',encoding='gbk') #2.读取数据 content3=f3.readli ...