网友回复
fetch是基于promise实现的,也可以结合async/await。
fetch请求默认是不带COOKIE的,需要设置fetch(URL,{credentials:’include’})。Credentials有三种参数:same-origin,include,*
服务器返回400 500 状态码时并不会reject,只有网络出错导致请求不能完成时,fetch才会被reject。
所有版本的 IE 均不支持原生 Fetch。
fetch是widow的一个方法;
fetch比较与ajax有着更好更方便的写法;
var arr1 = [{ name: "bfw", }]; fetch("url", { method: "post", credentials: 'include', headers: {//设置请求的头部信息 "Content-Type": "application/json", //跨域时可能要加上 //"Accept":"allication/json" }, //将arr1对象序列化成json字符串 body: JSON.stringify(arr1)//向服务端传入json数据 }).then(function(resp) { resp.json().then((data) => { }) });ajax
是XMLHTTPRequest的一个实例;
只有当状态为200或者304时才会请求成功;
fetch没有办法原生监测请求的进度,而XHR可以;
写法:
var xhr= new XMLHttpRequest(); // 新建XMLHttpRequest对象 xhr.onload= function(){ //请求完成 console.log(this.responseText); } // 发送请求: xhr.open('GET', '/user'); xhr.send();完整地ajax封装
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(); } } } }; }