编码请求主体

栏目: 编程语言 · XML · 发布时间: 6年前

内容简介:编码请求主体 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');
复制代码
编码请求主体

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

让创意更有黏性

让创意更有黏性

[美] 奇普·希思、[美] 丹·希思 / 姜奕晖 / 中信出版社 / 2014-1-8 / 49.00元

你或许相信在太空中唯一能看到的人工建筑就是万里长城,可乐能腐蚀人体骨骼,我们的大脑使用了10%;与此同时,你却记不得上周例会上领导的安排,昨天看过的那本书里写了什么,上次参加培训的主要内容…… 为什么? 这就引发出《让创意更有黏性》的核心问题:什么样的观点或创意具有强有力的黏性,能被他人牢牢记住? 国际知名行为心理学家希思兄弟根据大量的社会心理学研究案例,揭示了让创意或观点具有黏......一起来看看 《让创意更有黏性》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器