博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
payload和formData有什么不同?
阅读量:6092 次
发布时间:2019-06-20

本文共 1770 字,大约阅读时间需要 5 分钟。

最近做项目的时候,在通过post请求向服务端发送数据的时候,请求失败了。错误信息如下:

返回的400(bad request)错误,说明客户端这边发送的请求是有问题的。

和通过jquery中的ajax方法发送的请求作对比。发现问题出在了请求的主体部分。

 

这里的请求主体部分是payload的形式的。

 

 而直接通过jq,是如下这种formdata形式。

 

formData是什么?

 formData是客户端主体部分组装数据的一种方式,当我们使用:

  1. method='POST'提交一个HTML-Form表单
  2. 如上图中黄色部分的content-Type:application/x-www-form-urlencoded
  3. content-Type:multipart/form-data

这三种方式去提交请求主体的时候,就是formData形式。

将如上的请求简写一下:

起始行:POST /getProduct HTTP/1.1首部: Content-Type: application/x-www-form-urlencoded主体1:productId=3189 单参主体2:productId=3189&orderId=145 多参

主体的形式会有两种,在多参数的情况下,和get请求一样,是用&进行连接的。

$.ajax({  url : '/v2/product/getProductProp',  data :{    'productId': proid,  },  type: 'post',}).then(function(data) {  // 成功的回调}).fail(function() {  // 失败的回调  that.fetchDataFailed();}).done(function() {  // 请求结束的回调      });

在jq的ajax模块中,contentType的默认是使用的formData发送主体的。既然如此的话,我们就通过传入自定义的contentType

$.ajax({  url : '/v2/product/getProductProp',  data :{    'productId': proid,  },  type: 'post',  contentType:'application/json' //注意这里的不同}).then(function(data) {  // 成功的回调}).fail(function() {  // 失败的回调  that.fetchDataFailed();}).done(function() {  // 请求结束的回调      });

是的,我们确实成功的修改了formData的提交形式,变成了payload.

 

payload是什么?

payload是一种以JSON格式进行数据传输的一种方式。

http可能会传输payload,如果不限制其请求的方式(那么请求的方法就是OPTIONS)或者响应的状态码,其包含元数据,头部区域和数据。

如果数据是通过正常的put或者post方法发送的,那么payload就是一个http请求起始行紧接一个CRLF后面的那一部分。

起始行:POST /getProduct HTTP/1.1首部: Content-Type: application/json主体1:{"productId":3189} 单参主体2:{"productId":3189,"orderId":145} 多参

同样的,我们可以将payload形式的参数。通过formData()来组装。

 通过formData()组装后的数据就像表单数据一样,变成了键/值对的形式。

小结

  • 首部属性contentType可以改变请求的数据提交方式:application/json(payload),application/x-www-form-urlencoded(formData)
  • 服务端的响应方式决定客户端的提交方式
  • 使用formData()可以通过payload提交表单数据:multipart/form-data

转载于:https://www.cnblogs.com/crazycode2/p/8988938.html

你可能感兴趣的文章
alarm rtc
查看>>
SGMII
查看>>
预处理、const与sizeof相关面试题
查看>>
爬虫豆瓣top250项目-开发文档
查看>>
Elasticsearch增删改查
查看>>
oracle归档日志增长过快处理方法
查看>>
有趣的数学书籍
查看>>
teamviewer 卸载干净
查看>>
多线程设计模式
查看>>
解读自定义UICollectionViewLayout--感动了我自己
查看>>
SqlServer作业指定目标服务器
查看>>
UnrealEngine4.5 BluePrint初始化中遇到编译警告的解决办法
查看>>
User implements HttpSessionBindingListener
查看>>
抽象工厂方法
查看>>
ubuntu apt-get 安装 lnmp
查看>>
焊盘 往同一个方向增加 固定的长度方法 总结
查看>>
eclipse的maven、Scala环境搭建
查看>>
架构师之路(一)- 什么是软件架构
查看>>
jquery的冒泡和默认行为
查看>>
Check failed: error == cudaSuccess (7 vs. 0) too many resources requested for launch
查看>>