原生js实现GET和POST

        // success成功回调	error失败回调
		// params格式k=v&k=v...
		// get异步请求
		function getHttp({
			url,
			params,
			success,
			error
		}) {
			let xhr = new XMLHttpRequest()
			if (params) {
				xhr.open('get', url + '?' + params, true)
			} else {
				xhr.open('get', url, true)
			}
			xhr.send()
			xhr.onreadystatechange = function() {
				if (xhr.readyState === 4) {
					if (xhr.status === 200 || xhr.status === 304) {
						success(JSON.parse(xhr.responseText));
					} else {
						error('请求失败');
					}
				}
			}
		}

		// post异步请求
		function postHttp({
			url,
			params,
			success,
			error
		}) {
			// params格式为对象
			let xhr = new XMLHttpRequest();
			xhr.open('post', url, true)
			xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded")
			xhr.send(JSON.stringify(params))
			xhr.onreadystatechange = function() {
				if (xhr.readyState === 4) {
					if (xhr.status === 200 || xhr.status === 304) {
						success(JSON.parse(xhr.responseText))
					} else {
						error('请求失败')
					}
				}
			}
		}


// xhr.readyState 属性一共有5个值,代表5种状态
  //0 服务器已就绪,但什么都还没开始(还没调用open())
  //1 服务器已连接 ( 还没有调用send() )
  //2 请求已接收,但尚未响应(通常现在可以从响应中获取内容头)
  //3 请求处理中,还没有完成(通常响应中已有部分数据可用了,但服务器还没有完全完成响应)
  //4 响应已经完成,可以获取并使用服务器返回的数据

// xhr.status 状态码:
  // 1xx:信息响应类,表示接收到请求并继续处理
  // 2xx:处理成功响应类,表示动作被成功接收,理解和接受
  // 3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
  // 4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
  // 5xx:服务端错误,服务器不能正确执行一个正确的请求  


1.post请求安全,数据量比get大
2.get请求不需要设置请求头,参数以 ?name=张三&age=18&sex=男 形式进行拼接
3.post需要设置请求头参数在send方法中以字符串形式传递

你可能感兴趣的:(javascript)