2018-04-12 实现AJAX

1. 原生JS实现AJAX

第一步:let request = new XMLHttpRequest();

1. 设置请求

请求的第一部分:

request.open('get','/xxx')  //get请求,路径为/xxx

第二部分:

request.setRequestHeader('Accept','text/html')

第四部分:

request.send('请求体')  //请求一般没有第四部分,可以直接send空字符串

2. 获取响应

获取HTTP状态码

request.status  //200
request.statusText  //OK

获取响应第二部分

request.getAllResponseHeaders()  //获取第二部分所有
request.getResponseHeader('Content-Type')  //获取Content-Type

获取第四部分

requeset.responseText

2. jQuery实现AJAX

  1. 封装ajax
jQuery.ajax=function({url,method,body,headers}){
  return new Promise(function(resolve,reject){
    let request = new XMLHttpRequest()
    request.open(method,url)  //配置request
    for(let key in headers){
      let value = headers[key];
      request.setRequestHeader(key,value);
    }
    request.onreadystatechange = ()=>{
      if(request.state === 4){
        if(request.status >= 200 && request.status < 300){
          resolve.call(undefined,request.responseText)
        }else if{request.status >= 400}{
          reject.call(undefined,request)
        }
      }
    }
    request.send(body);  //body是第四部分
  })
}

返回一个promise对象,传入的两个参数resolve、reject,分别代表成功时执行的内容和失败时执行的内容,下面的then就是使用promise。

  1. 使用ajax
$.ajax({
  url: '/xxx',
  method: 'get',
  headers:{
    'content-type':'application/x-www-form-urlencoded',
    'pyz':21
  }
}).then(
  (responseText) =>{
    console.log(responseText);  
    return responseText;  
  },
  (request)=>{
    console.log('error'); return 'error'  
  }
)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Promise 对象 Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函...
    neromous阅读 8,729评论 1 56
  • 你不知道JS:异步 第三章:Promises 接上篇3-1 错误处理(Error Handling) 在异步编程中...
    purple_force阅读 1,426评论 0 2
  • 你不知道JS:异步 第三章:Promises 在第二章,我们指出了采用回调来表达异步和管理并发时的两种主要不足:缺...
    purple_force阅读 2,109评论 0 4
  • 责任这个词本来的含义就是分内之事,我们每个人立足在社会上都应该有不同的责任,比如我们当老师的就应该全心全意的育人,...
    玉和堂传统艾灸阅读 121评论 0 2
  • 我还是很喜欢你 像是夏夜里的一场飞雪 雪一直在下 纯然静美 宛若童话 你说 会有一场雪 我就在三亚的海边 等了整整...
    琳茗讲故事阅读 292评论 0 2