JS中的Ajax发送请求获取数据流程

前言: JS两个常用的请求方法 【XMLHttpRequest() 、fetch()

XMLHttpRequest() 的使用方法大致可以分为四步:
1、创建XMLHttpRequest的对象成员
2、使用open方法执行发送前的需要加入的参数
3、使用send方法进行请求,在send方法中可传入参数
4、使用onreadstatechange制定回调函数对返回的数据进行处理
fetch() 的使用方法比之XMLHttpRequest稍简单一些,直接通过语法格式来看更明了一些
语法格式:

fetch(url,object) //可以在object中填入请求方式、设置请求头等一些数据。具体的可看博客最下方的MDN代码片段
.then(response => response.json())
.then(data =>{ //数据获取成功回调
//data为请求回来的数据
})
.catch(err => { //数据获取失败回调
console.log(err.message)
})

一、XMLHttpRequest( )

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script type="text/javascript">
		window.onload = function(){
				//1、创建对象 兼容处理
				var xhr = null;
				/*if条件判断当前浏览器是否有XMLHttpRequest(),如果有直接创建一个XMLHttpRequest()实
				例对象,如果没有那就是使用else条件下的用于兼容IE8以下IE浏览器的方法*/
				if(window.XMLHttpRequest) {
					xhr = new XMLHttpRequest();
				} else {
					xhr = new ActiveXObject("Microsoft.XMLHTTP");
				}
				//2、准备发送
				/*open方法传入三个参数,第一个是请求方式,第二个是地址,第三个是设置同步或异步,
				基本上设置为true(也就是异步方法)*/
				xhr.open("get","后端URL地址",true);
				//3、执行发送
				xhr.send(null); //send方法中可以传入发送时携带的数据,用于后台验证
		
				/*
				//post请求方法
				xhr.open("post","URL地址",true); //异步post请求
				xhr.setRequestHeader("设置请求头信息");
				xhr.send('携带的请求参数,如:用户名、密码等');
				*/
				
			//4、制定回调函数
			xhr.onreadystatechange = function(){
				if(xhr.readyState == 4){
					if(xhr.status == 200){
					/*responseText用于获取到后端传过来的数据,这里是json格式,如果是XML格式则使用
					//	var result = xhr.responseXML;
					*/
						var result = xhr.responseText; //获取JSON数据
						result = JSON.parse(result); //解析JSON数据
						//对返回数据进行处理,用于更新页面
						var newHtml = document.getElementById("container").innerHTML;
						for(var i=0;i<result.length;i++){
							var item = result[i];
							var name = item.name;
							var sex = item.sex;
							var age = item.age;

							console.log(name,sex,age);
							var tempHtml =`<tr><td>${name}+</td><td>${age}</td><td>${sex}</td></tr>`;
							newHtml += tempHtml;

						}
						//将数据渲染到页面
						document.getElementById("container").innerHTML = newHtml; 
						
					}
				}
			};
		};
	</script>
</head>
<body>
	<div>
		<table id="container">
			<tr>
				<th>姓名</th>
				<th>年龄</th>
				<th>性别</th>
			</tr>
			
		</table>
	</div>
</body>
</html>

以上代码中展示了JavaScript 的Ajax发送请求和获取数据的流程,大致可以分为四步:

1、创建XMLHttpRequest实例对象
	 xhr  =  new XMLHttpRequest( )
	
2、使用open方法发送请求
	xhr.open("请求方法","后端URL地址",true/false);
	
3、执行发送
	xhr.send(请求携带的参数);
	
4、制定回调函数解析后台返回数据并将其渲染到页面
xhr.onreadystatechange = function(){
		// 方法体
		//responseText用于获取到后端传过来的数据,这里是json格式,如果是XML格式则使用
		//	var result = xhr.responseXML;
		
		var result = xhr.responseText; //获取JSON数据
		result = JSON.parse(result); //解析JSON数据
 } 

二、fetch()

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>

    fetch('https://autumn.cn/search?keywords=喜欢你')
    .then(response => {
      console.log(response) //得到的是一个response对象
      return response.json() //使用该对象的json方法使其返回一个promise对象
    })
    .then(data => { //使用promise对象的then方法处理得到的数据
      console.log(data) 
    }).catch(err =>{ //使用promise对象的catch捕获错误信息
      console.log(err.message)
    })

  </script>
</body>
</html>

以下资料来自MDN官方可供参考

// Example POST method implementation:
async function postData(url = '', data = {}) {
  // Default options are marked with *
  const response = await fetch(url, {
    method: 'POST', // *GET, POST, PUT, DELETE, etc.
    mode: 'cors', // no-cors, *cors, same-origin
    cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached
    credentials: 'same-origin', // include, *same-origin, omit
    headers: {
      'Content-Type': 'application/json'
      // 'Content-Type': 'application/x-www-form-urlencoded',
    },
    redirect: 'follow', // manual, *follow, error
    referrerPolicy: 'no-referrer', // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url
    body: JSON.stringify(data) // body data type must match "Content-Type" header
  });
  return response.json(); // parses JSON response into native JavaScript objects
}

postData('https://example.com/answer', { answer: 42 })
  .then(data => {
    console.log(data); // JSON data parsed by `data.json()` call
  });

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

讷言丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值