AJAX(二)

AJAX精讲:从原理到实践
本文深入解析AJAX的工作原理,涵盖客户端JS如何发起请求、服务端响应过程,以及通过原生JS和自封装的jQuery.ajax实现AJAX交互。文章详细介绍了设置请求头部、发送请求体、处理响应状态及数据的全过程。

AJAX的所有功能


  • 客户端的JS发起请求(浏览器上)
  • 服务端的JS发送响应(node.js上)
  • JS可以设置任意请求header
    • 设置请求的第一部分 request.open('get','/xxx')
    • 设置请求的第二部分 request.setHeader('content-type,'x-www-form-urlencoded')
    • 设置请求的第四部分 request.send('a=1&b=2')
  • JS可以获取任意响应header
    • 获取响应的第一部分 request.staus/request.statusText
    • 获取响应的第二部分 request.getResponseHeader()/request.getAllResponseHeaders()
    • 获取响应的第四部分 request.responseText

原生JS实现AJAX


myButton.addEventListener('click', (e)=>{
  let request = new XMLHttpRequest()
  request.open('post', '/xxx') // 设置请求头
  request.setRequestHeader('frank','18')  // 设置请求的第二部分
  request.setRequestHeader('Content-Type','x-www-form-urlencoded')  // 设置请求的第二部分
  request.send('我偏要设置request第四部分')//  设置请求第四部分
  request.onreadystatechange = ()=>{
    if(request.readyState === 4){
      console.log('请求响应都完毕了')
      console.log(request.status)
      console.log(request.statusText)
      if(request.status >= 200 && request.status < 300){
        console.log('说明请求成功')
        console.log(request.responseText)
        let string = request.responseText
        let object = window.JSON.parse(string)  // 把符合 JSON 语法的字符串string转换成 JS 对应的值object
        // JSON.parse 是浏览器提供的
      }else if(request.status >= 400){
        console.log('说明请求失败') 
      }

    }
  }
})

复制代码

自己封装一个jQuery.ajax


window.jQuery.ajax = function({url,method,body,successFn,failFn,headers}){ // ES6解构赋值
  let request = new XMLHttpRequest()
  request.open(method,url) //设置请求的第一部分
  for(let key in headers){  // 设置请求的第二部分
    let value = headers[key]
    request.setRequestHeader(key,value)
  }
  request.onreadystatechange = ()=>{ //处理请求的结果
    if(request.readyState === 4){
      if(request.status >= 200 && request.status < 300){
        successFn.call(undefined,request.responseText) // 如果返回的状态码为200~300之间,执行函数successFn
      }else if(request.status >= 400){
        failFn.call(undefined,request) //如果返回的状态码大于400,执行函数failFn
      }
    }
  }
  request.send(body)// 设置请求的第四部分
}
复制代码

使用它

myButton.addEventListener('click',(e)=>{
  window.jQuery.ajax({
    url: '/xxx', //设置请求第一部分路径
    method: 'get', // 设置请求第一部分动词
    headers: {
      'content-type': 'application/x-www-form-urlencoded',
      'frank': '18'
    }, // 设置请求第二部分
    successFn: (x)=>{
      console.log(x)
    }, // 设置成功回调函数
    failFn: (x)=>{
      console.log(x)
      console.log(x.status)
      console.log(x.responseText)
    } // 设置失败回调函数
  })
})
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值