前言: 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
});