废话不多说,直接上代码

  1. function ajax(options){
  2. options = options || {}
  3. options.type = (options.type || 'GET').toUpperCase()
  4. // 创建 XMLRequesHttp对象
  5. var xhr
  6. if(window.XMLHttpRequest){
  7. xhr = new XMlHttpRequest()
  8. }else{ //IE7 及以下IE
  9. xhr = new ActiveXObject('Microsoft.XMLHTTP')
  10. }
  11. // 定义成功或者失败的回调函数
  12. xhr.onreadystatechange = function(){
  13. if(xhr.readyState = 4){
  14. var status = xhr.status
  15. if(status >=200 && status < 300){
  16. options.success&&options.success(xhr.responseText,xhr.responseXML)
  17. }else{
  18. options.fail && options.fail(status)
  19. }
  20. }
  21. }
  22. // 分别定义请求的事件
  23. if(options.type === 'GET'){
  24. xhr.open("GET",options.url+'?'+getParmas(options.parmas))
  25. xhr.sed(null)
  26. }else if(options.type === 'POST'){
  27. xhr.setRequestHeader('content-type',"application/x-www-form-urlencoded")
  28. xhr.open("POST",options.url)
  29. xhr.send(options.parmas)
  30. }
  31. }
  32. // 参数转化函数
  33. function getParmas(data){
  34. var param = [],
  35. str = "";
  36. for(var k in data){
  37. param.push(`${k}=${data[k]}`)
  38. }
  39. str = param.join('&")
  40. str += 'randomNumber'+'='+Math.random().tofixed(10).replace('.') // 去除小数点并添加随机数
  41. return str;
  42. }

知识点

XMLRequestHttp各个浏览器支持情况

IE7+,Firefox,Opera,Chrome和Safari支持原生XMLRequestHttp

onreadystatechange运行

下面的代码中onreadystatechange中会直接使用XHR,这样的处理方式是DOM0级方法为XHR对象添加了事件处理程序,原因是并不是所有的浏览器都辉支持DOM2级方法,所以有的浏览器内部处理此事件时,可能不会向其传递event事件对象,那么为了所有平台都兼容,最好的处理方式就是使用XHR对象本身来确定下一步应该会怎么做。注意:此方法建议在open之前调用

readyState几种状态的讲解

0: 未初始化,尚未调用open方法;
1: 启动,已经调用open方法,但未调用send方法;
2: 发送 已经调用send方法,但尚未接到服务端相应;
3: 接收,但是只接收了部分响应;
4: 完成,已经接收了全部响应数据,二期已经可以在客户端使用了

state几种状态值的讲解

200 一般指的请求成功
TIM截图20191003162554.jpg

300——请求重定向
image.png

400——资源未找到或未授权
image.png

500——服务器内部错误
image.png

open方法的讲解

接受3个参数
第一个是请求类型get或者post;
第二个是url;
第三个表示是否异步。另外需要说明两点:意识URL相对于执行代码的当前页面(可以使用绝对路 径);而是open方法并不会真正发送请求。

send方法的讲解

send方法只接受一个参数,
作为请求主体发送的数据,如果不需要通过请求主体(即post),则必须传入null,这个参数对于浏览器是必须的。调用send后,请求会发送到服务器上进行处理。