一、写在前面
今天总结一下fetch
和ajax
的区别。
二、Ajaxajax
的本质就是使用XMLHttpRequest
对象来请求数据,下面是简单的原生js实现。
function ajax(url, fnSucc, fnFaild)
{
//1.创建Ajax对象
if(window.XMLHttpRequest){
var oAjax=new XMLHttpRequest();
}else{
var oAjax=new ActiveXObject("Microsoft.XMLHTTP");
}
//2.连接服务器(打开和服务器的连接)
oAjax.open('GET', url, true);
//3.发送
oAjax.send();
//4.接收
oAjax.onreadystatechange=function (){
if(oAjax.readyState==4){
if(oAjax.status==200){
//alert('成功了:'+oAjax.responseText);
fnSucc(oAjax.responseText);
}else{
//alert('失败了');
if(fnFaild){
fnFaild();
}
}
}
};
}
三、fetchfetch
是全局量window
的一个方法,它的主要特点有:1、第一个参数是URL
.2、第二个参数是可选参数,可以控制不同的配置的init对象。
3、使用了JavaScript Promises来处理结果/回调。
<script>
fetch('http://123.207.32.32:8000/home/multidata').then(function(response) {
console.log(response)
return response.json()
}).then(function(returnedValue) {
console.log(returnedValue)
}).catch(function(err) {
console.log(err)
})
</script>
四、fetch和ajax主要有两种方式不同4.1、
从fetch()
返回的Promise
将不会拒绝http
错误状态,即使相应是一个相应是400
或者500
,它都会安装正常的去解决,并且仅在网络故障时或者任何阻止请求完成时,它才会拒绝,可以做简单的封装。
function checkStatus(response) {
if (response.status >= 200 && response.status < 300) {
return response
} else {
var error = new Error(response.statusText)
error.response = response
throw error
}
}
function parseJSON(response) {
return response.json()
}
fetch('/users')
.then(checkStatus)
.then(parseJSON)
.then(function(data) {
console.log('request succeeded with JSON response', data)
}).catch(function(error) {
console.log('request failed', error)
})
4.2、
默认情况下,fetch
在不会接受和发送cookie
,如果需要发送cookie
的话,此时需要对其单独进行配置。
fetch(url, {
credentials: 'same-origin'
})
same-origin
值使得fetch
处理cookie
与XMLHTTPRequest
类似。否则,cookie
将不会被发送,导致这些请求不保留认证会话。
对于cors
请求,使用include
值允许将凭证发送到其他域。
fetch(url, {
credentials:'include'
})
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_47450807/article/details/123856170
内容来源于网络,如有侵权,请联系作者删除!