1、关于fetch的了解
1、现代版浏览器自带的fetch,是存在兼容性的,不支持IE678等低版本浏览器的,如果用fetch在低版本浏览器中请求数据是不起作用的。
2、准确的来说fetch就是 promise + XMLHttpRequest 方式的结合。
3、 需要注意的是fetch并不是ajax的进一步封装,他是原生的js。
4、fetch(url)会返回一个Promise对象,所以要定义一个容器来存储。
下面是相关代码解释
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>现代版浏览器自带的fetch实现向后端请求数据</title>
</head>
<body>
<p class="inp">
<input type="button" value="点我发送请求" id="clickMe">
</p>
<p class="container">
</p>
</body>
<script src="https://cdn.jsdelivr.net/gh/jquery/jquery@3.4.1/dist/jquery.js"></script>
</html>
下面是js部分
$("#clickMe").click(function(){
//首先定义好一个请求数据的有效地址
//在这里为了方便模拟,直接去JSONPlaceholder官网中随机找了个api接口,嘻嘻
//JSONPlaceholder 是支持跨域请求的
var url = 'http://jsonplaceholder.typicode.com/albums';
//使用浏览器自带的fetch,其中fetch是原生的:ƒ fetch() { [native code] }
// 但是fetch(url)会返回一个Promise对象,所以要定义一个容器来存储
var responseData = fetch(url);
//Promise是一个抽象的异步处理对象,当这个Promise生成后可以用then()
// 方法来读取成功状态与失败返回状态的回调函数
responseData.then((response)=>{
//成功时返回的数据会存放在response.body流中,所以也需要一个定义容器来接收
var responseData2 = response.json();
console.log(responseData2);//返回的是一个Promise对象
//同时打印出来的还是一个Promise,还要进行一次处理
responseData2.then((response)=>{
console.log(response);//响应的数据
//渲染数据
renderData(response);
});
},(error)=>{
return error;
});
});
function renderData(data){
var _html = ``;
data.forEach(ele => {
_html += `
<div>
<p>id:${ele.id}</p>
<p>Title:${ele.title}</p>
</div>
`
});
$(".container").html(_html);
}