编码请求主体

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

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

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

查看所有标签

猜你喜欢:

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

The Probabilistic Method Second Edition

The Probabilistic Method Second Edition

Noga Alon、Joel H. Spencer / Wiley-Blackwell / 2000 / $121.95

The leading reference on probabilistic methods in combinatorics-now expanded and updated When it was first published in 1991, The Probabilistic Method became instantly the standard reference on one......一起来看看 《The Probabilistic Method Second Edition》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试