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. 用AndroidStudio创建so

    Android开发中经常遇到so,下面介绍用Android Studio创建so.Android Studio版本3.0.1. 一 编写代码 1 创建java类myJNI.java,并且声明一个nat ...

  2. Python Django框架笔记(一):安装及创建项目

     #推荐一本书<Python核心编程>(适合有一定基础的),美国人Wesley Chun编写的,京东.淘宝应该都有.我是觉得写的很好,详细.简洁.满满的干货,不像有的书整本看完也没什么用. ...

  3. MySQL innodb中各种SQL语句加锁分析

    概要 Locking read( SELECT ... FOR UPDATE or SELECT ... LOCK IN SHARE MODE),UPDATE以及DELETE语句通常会在他扫描的索引所 ...

  4. python常用内置模块

    #持续更新 #在使用内置模块的时候需要导入,例如import abc,则导入abc模块,当然模块也可以自己写,相当于一个类,后面放到类里说,这个因为环境闲置,有些无法执行,只能理解了 #os系统操作 ...

  5. 【转】HTTP学习---图解HTTP[三次握手&&ISO模型]

    [转]https://www.toutiao.com/i6592556686068679182/ 首先了解一次完整的HTTP请求到响应的过程需要的步骤: 1. 域名解析 2. 发起TCP的3次握手 3 ...

  6. Linux uniq命令详解

    uniq常见命令参数 用法:uniq [选项]... [文件] 从输入文件或者标准输入中筛选相邻的匹配行并写入到输出文件或标准输出. 不附加任何选项时匹配行将在首次出现处被合并. 长选项必须使用的参数 ...

  7. Win7命令终端基础配色指南

    微软对控制台字体的元数据有严格的限制,https://support.microsoft.com/zh-cn/help/247815/necessary-criteria-for-fonts-to-b ...

  8. php 错误1

    Maximum execution time of 30 seconds exceeded 方法一,修改php.ini文件 max_execution_time = 30; Maximum execu ...

  9. 2019 wannafly winter camp day 3

    2019 wannafly winter camp day 3 J 操作S等价于将S串取反,然后依次遍历取反后的串,每次加入新字符a,当前的串是T,那么这次操作之后的串就是TaT.这是第一次转化. 涉 ...

  10. nginx之location.md

    安装echo模块 下载模块 # pwd /root # git clone https://github.com/openresty/echo-nginx-module 重新编译 先查看版本,然后根据 ...