赞
踩
一、写在前面
今天总结一下fetch
和ajax
的区别。
二、Ajax
ajax
的本质就是使用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(); } } } }; }
三、fetch
fetch
是全局量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'
})
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。