内容简介:编码请求主体 HTTP的POST请求包括一个请求主体,将会包含客户端传递给服务器的数据,HTML表单,当用户提交表单时,表单中的数据将会编码到字符串中,一并伴随着请求发送。 默认情况下HTML表单通过POST方法发送给服务器,而编码后的表单数据为请求主体。规则:使用URL编码,使用等号把编码后的名字和值分开,并使用&符号将名/值对分开。
编码请求主体 HTTP的POST请求包括一个请求主体,将会包含客户端传递给服务器的数据,
表单编码的请求
HTML表单,当用户提交表单时,表单中的数据将会编码到字符串中,一并伴随着请求发送。 默认情况下HTML表单通过POST方法发送给服务器,而编码后的表单数据为请求主体。
规则:使用URL编码,使用等号把编码后的名字和值分开,并使用&符号将名/值对分开。
如下所示: find=pizza&zipcode=02134&redius=1km
表单数据编码格式会有一个正式的MIME类型
application/x-www-form-urlencoded 复制代码
MIME 多用途internet邮件扩展类型,对大小写不敏感,传统写法小写
一个栗子
用于HTTP请求的编码对象
/* * 编码对象的属性 * 如果它们是来自HTML表单的名/值对,使用application/x-www-form-urlencolded * 将键值对转换为HTTP的编码方式的一个 工具 函数 */ function encodeFormData(data) { if (!data) return ''; // 如果传入为空,直接返回字符串 var pairs = []; // 保存名/值对 for(var name in data) { // 进行遍历 if (!data.hasOwnProperty(name)) continue; // 跳过继承属性,指示自身的属性是否具有该值 if (typeof data[name] === 'function') continue; // 跳过方法 var value = data[name].toString(); // 将值转换成字符串 name = encodeURIComponent(name.replace('%20', '+')); value = encodeURIComponent(value.replace('%20', '+')); pairs.push(name + '=' + value); // 记住名值对 } return pairs.join('&'); // 进行连接 } 复制代码
上方代码将传入的键值对,转换为url的方式提交
function postData(url, data, callback) { var request = new XMLHttpRequest(); // 新建一个类 request.open("post", url); request.onreadystatechange = () => { if (request.readyState === 4 && callback) { callback(request); // 调用回调函数 }; request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); } request.send(encodeFormData(data)); } 复制代码
上方的代码将会发送一个post请求,将键值对转换为标准的url进行提交
var e = {e:2222220}; postData('./', e); 复制代码
查看一下post请求结果
同样的get请求
function getData(url, data, callback) { var request = new XMLHttpRequest(); request.open('GET', url + '?' + encodeFormData(data)); request.onreadystatechange = () => { if (request.readyState === 4 && callback) { callback(request); } } request.send(null); } 复制代码
效果如下
JSON编码
需要在将其更改为
application/json 复制代码
即可以进行表单提交
function postJSON(url, data, callback) { var request = new XMLHttpRequest(); request.open('post', url); request.onreadystatechange = () => { if (request.readystate === 4 && callback) { callback(request); }; } request.setRequestHeader('Content-Type', 'application/json'); request.send(JSON.stringify(data)) } 复制代码
演示如下
psotJSON('./', e); 复制代码
XML编码请求
xml文档作为主体的HTTP POST请求
function postQuery(url, what, where, radius, callback) { var request = new XMLHttpRequest(); request.open('post', url); // 对指定的url发送POST请求 request.onreadystatechange = () => { if (request.readyState === 4 && callback) callback(request); } // 下面开始使用XML var doc = document.implementation.createDocument('', 'query', null); // document.implementaton 返回一个DOMImplementation对象,该对象和当前文档的节点没有任何关系(类似于一个虚拟节点)其根节点为qqery 并且没有声明 var query = doc.documentElement; // 返回文档的根元素 var find = doc.createElement('find'); // 创建一个find元素 query.appendChild(find); // 让find成为query的子节点 find.setAttribute('zipcode', where); // 创建一个属性 find.setAttribute('radius', radius); find.appendChild(doc.createTextNode(what)); // what作为文本节点,并且设置为find的子节点 // 现在向服务器发送XML编码的数据 // 将会自动设置Content-Type头 request.send(doc); }; 复制代码
查看结果
postQuery('./', 'hello', 'world', 'world'); 复制代码
打开网络面板查看
multipart/from-data 请求
当HTML表单包含文件上传元素的时候,表单需要使用二进制上传,即
multipart/form-data 复制代码
使用post方法发送multipart/form-data请求主体
XHR 为一种简称,全称为XMLHttpRequest
将会以一个字节一个字节发送
function postFormData(url, data, callback) { if (typeof FormData === 'undefined') { // 兼容,判断该api是否存在 throw new Error('not FormData'); } var request = new XMLHttpRequest(); request.open('post', url); request.onreadystechange = () => { // 当响应完成的时候,回调函数 if (request.readyState === 4 && callback) callback(request); // 如果存在,则调用回调函数 }; var formdata = new FormData(); // 创建文件上传的类 for(var name in data) { if (!data.hasOwnProperty(name)) continue; // 跳过继承的属性 var value = data[name]; // 取值 if (typeof value === 'function') continue; // 跳过方法 // 将其键值对插入节点中 formdata.append(name, value); // 添加键值对作为子节点 } // 由于使用FormData将会自动设置头部信息 // 将键值对作为主体进行发送 request.send(formdata); } 复制代码
postFormData('./', '11111111111111'); 复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- LevelDB 源码分析(二):主体结构
- 伯克利推出大规模多主体强化学习算法库
- Smoke Loader:主体、控制台、插件,以及盗版之殇
- Smoke Loader:主体、控制台、插件,以及盗版之殇
- Kubernetes v1.18 重磅发布 | 新版本五大核心主体 & 主要变化解读
- 国家邮政局:80/90后成快递员主体,万元薪酬并不普遍
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。