AJAX


AJAX 全称 Asynchronous Javascript And XML,即异步的 JavaScript 和 XML,AJAX 允许以任意形式发送请求并且以任意形式展示。
符合如下技术的就叫做 AJAX:使用 XMLHttpRequest 发送请求,服务器返回 XML 格式的字符串,浏览器解析 XML,并局部更新页面

自己封装一个类似 jQuery 的 ajax

//封装
window.jQuery.ajax= function({method,url,body,headers}){
    return new Promise(function(reslove,reject){
        let xhr = new XMLHttpRequest()
        xhr.open(method,url)
        for(let key in headers){
            let value = headers[key]
            xhr.setRequestHeader(key,value)
        }
        xhr.send(body)
        xhr.onreadystatechange=funciton(){
            if(xhr.readyState===4){
                if(xhr.status>=200&&xhr.status<300){
                    reslove.call(undefined,xhr.responseText)
                }else if(xhr.status>=400){
                    reject.call(undefined,xhr)
                }
            }
        }
    })
}
//使用
window.jQuery.ajax({
  method: 'post',
  url: '/xxx',
  body: 'a=1',
  headers:{
      'Content-Type': 'x-www-foorm-urlencoded'
  }}).then(
    (responseText)=>{console.log(responseText)},
    (xhr)=>{console.log(xhr)}
  )

axios

使用举例

//get
axios
  .get("/xxx", {
    params: {
      id: 123
    }
  })
  .then(res => {
    console.log(res);
  })
  .catch(err => {
    console.log(err);
  });
// 或者
axios("/user/12345");
//post
axios
  .post("/xxx", {
    qqq: "asd",
    www: "sad"
  })
  .then(res => {
    console.log(res);
  })
  .catch(err => {
    console.log(err);
  });
// 并发请求(concurrency)
function getUserAccount() {
  return axios.get("/user/12345");
}
function getUserPermissions() {
  return axios.get("/user/12345/permissions");
}
axios.all([getUserAccount(), getUserPermissions()]).then(
  axios.spread(function(acct, perms) {
    //当这两个请求都完成的时候会触发这个函数,两个参数分别代表返回的结果
  })
);

fetch

Fetxh 的出现是为了替换传统的 xhr。目前很多新的库都默认使用 fetch

fetch(url)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(e => console.log("Oops, error", e));

支持 asynx await

async function(){
    try {
        let response = await fetch(url);
        let data = response.json();
        console.log(data);
        } catch(e) {
        console.log("Oops, error", e);
        }
}

文章作者: 沐雪
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 沐雪 !
评论
 上一篇
前端路由 前端路由
前端路由简单的说,路由是根据不同的 url 地址展示不同的内容或组件前端路由更多用在单页应用上, 也就是 SPA, 因为单页应用, 基本上都是前后端分离的, 后端自然也就不会给前端提供路由。 主要方案在 html5 的 history
2018-08-06
下一篇 
jQuery jQuery
实现一个 jQuery 的 API实现一个函数,并判断参数是节点还是选择器,返回一个 nodes(数组形式的对象)让 addClass()可以同时增加几个 className,把 setText 变成 text(既能 getText,又能
2018-07-16
  目录