ajax 重复请求、请求超时与网络异常的处理

重复请求的处理

发起一个新的请求之前先判断当前是否有相同的请求正在发送,如果有就取消掉。类似于防抖

//标识变量
let isSending = false; //是否正在发送AJAX请求
btns[e].onclick = function () {
  //判断标识变量
  if (isSending) x.abort(); // 如果正在发送,则取消该请求,创建一个新的请求
  x = new XMLHttpRequest();
  //修改标识变量的值
  issending = true;
  x.open("GET", "http://127.8.0.1:8000/delay");
  x.send();
  x.onreadystatechange = function () {
    if (x.readyState === 4) {
      //请求完成修改标识变量为false
      isSending = false;
    }
  };
};

请求超时与网络异常的处理

超时设置

XMLHttpRequest.timeout 是一个无符号长整型数,代表着一个请求在被自动终止前所消耗的毫秒数。默认值为 0,意味着没有超时。

timeout 事件

当进度由于预定时间到期而终止时,会触发timeout 事件。

error事件

当发生网络错误时,会触发 error 事件。

案例(写于 xhr 对象创建之后):

//超时时间设置 2s还未得到响应结果就取消请求
xhr.timeout = 2000;
//超时处理
xhr.ontimeout = function () {
  //一般是设置一个提示效果,如旋转的小圆圈
  alert("加载中!");
};
//网络异常处理
xhr.onerror = function () {
  alert("你的网络似乎出了一些问题!");
};

 

posted @ 2022-09-27 14:22  Lamb~  阅读(629)  评论(0编辑  收藏  举报