文档章节

RequestPayload和Formdata

zimingforever
 zimingforever
发布于 2016/08/24 21:00
字数 515
阅读 110
收藏 0

今天使用fecth做异步的服务获取,调用方法如下

  return xFetch('/api/common/getsearchowner.json',{body: JSON.stringify(para),method:'POST'});

查看前台发出的request如下

POST /api/common/getsearchowner.json HTTP/1.1
Host: localhost:8989
Connection: keep-alive
Content-Length: 11
Pragma: no-cache
Cache-Control: no-cache
authorization:
Origin: http://localhost:8989
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36
content-type: text/plain;charset=UTF-8
Accept: */*
Referer: http://localhost:8989/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6

且有一个request payload的值

{"aaa":111}

而以前使用ajax的时候似乎没有这个值,而是一个form data记录了post的值

csrftoken:1472039431885

formdata和requestpayload到底有什么区别呢、为什么用fecth的时候,提交的数据都变成了request payload?

对于get请求,表单参数以name=value&name1=value1的形式附到url的后面

对于post请求,表单参数是在请求体中,也是以name=value&name1=value1的形式在请求体中,并且post请求的Content-Type为application/x-www-form-urlencoded,参数是在请求体中,即请求中的Form Data。在servlet中,可以通过request.getParameter(name)的形式来获取表单参数。

但是如果是原生的ajax请求,请求的Content-Type为text/plain;charset=UTF-8,而请求表单参数在RequestPayload中。此时的POST请求是不会读取请求体数据和进行相应的参数处理的,即不会解析表单数据来放到request parameter map中。所以通过request.getParameter(name)是获取不到的。此时servelet中只能用解析流的解析

为什么原生的ajax后者fetch不能获取form data呢?

jquery在执行post请求时,会设置Content-Type为application/x-www-form-urlencoded,所以服务器能够正确解析,而使用原生ajax请求时,如果不显示的设置Content-Type,那么默认是text/plain,这时服务器就不知道怎么解析数据了,所以才只能通过获取原始数据流的方式来进行解析请求数据。

解决方案是什么呢?可以再请求的时候增加

headers: {'Content-Type': 'application/x-www-form-urlencoded'}

参考文档:http://stackoverflow.com/questions/10494574/what-is-the-difference-between-form-data-and-request-payload

http://blog.csdn.net/mhmyqn/article/details/25561535

© 著作权归作者所有

zimingforever
粉丝 142
博文 266
码字总数 315040
作品 0
杭州
程序员
私信 提问
【Azure Services Platform Step by Step-第4篇】SQL Data Services 编程基础

这一篇,我们会详细讲解如何使用程序员的方法来操作SDS。 SDS提供SOAP和REST两种接口,这里我们是用REST+C#的方法来讲解。SOAP与之殊途同归,请有兴趣的同学自己查阅MSDN。 闲话少说,下面我...

技术小阿哥
2017/11/27
0
0
通过jQuery Ajax使用FormData对象上传文件

FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单"。在 Mozilla Developer 网站 使用FormData对象 有详尽的FormData对象使用说明。但上传...

郏高阳
2016/09/07
272
0
JS中使用FormData上传文件、图片的方法

转自http://www.jb51.net/article/89998.htm 参考:https://developer.mozilla.org/zh-CN/docs/Web/API/FormData/UsingFormDataObjects FormData 废话不多说,先上最后我用的完成版: 完整实......

lllo3o
2017/05/23
0
0
FormData以及原生Ajax上传图片

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_35085676/article/details/80752254 Ajax对于表单提交来说,是一个很好的工具,他提供了异步提交的效果...

岚漾忆雨
2018/06/20
0
0
使用FormData,进行Ajax请求并上传文件

使用FormData,进行Ajax请求并上传文件html代码 js代码

11968033
2016/11/03
17
0

没有更多内容

加载失败,请刷新页面

加载更多

php 遇到 No input file specified的解决方法

(一)IIS Noinput file specified 方法一:改PHP.ini中的doc_root行,打开ini文件注释掉此行,然后重启IIS 方法二: 请修改php.ini 找到 ; cgi.force_redirect = 1 去掉前面分号,把后面的1...

chenhongjiang
今天
5
0
MySQL 基础

一、常用命令 在命令行中,配置好环境变量后,通过cmd可以直接进入mysql命令行模式,同时列举几种常用命令 # 进入mysql数据库,密码可以先不写,打完-p后再输入,防止被别人看到mysql -u账...

华山猛男
今天
6
0
简单的博客系统(四)Django请求HTML页面视图信息--基于函数的视图

1. 编写用于查询数据的功能函数 应用目录 下的 views.py 文件通常用于保存响应各种请求的函数或类 from django.shortcuts import renderfrom .models import BlogArticles# Create your ...

ZeroBit
今天
5
0
用脚本将本地照片库批量导入到Day One中

因为目前iCloud 空间已经不足,其中95%都是照片,之前入手了DayOne,且空间没有限制,订阅费一年也不少,再加上DayOne作为一款日记App 也比较有名,功能方面最大的就是地理视图与照片视图,尤...

在山的那边
昨天
19
0
jupyter部署安装

python373 -m ipykernel install --name python373 ipython kernelspec list sc create myjupyterservice binpath="D:\apply\Python373\Scripts\jupyter-notebook --config=V:/my_work/jupyt......

mbzhong
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部