JS手写代码篇---手写ajax

14、实现ajax请求

通过 JavaScript 的 异步通信,从服务器获取 XML 文档从中提取数据,再更新当前网页的对应部分,而不用刷新整个网页。

步骤:

  • 创建一个 XMLHttpRequest 对象。
  • 设置超时时间。
  • 定义成功和失败的回调函数。
  • 监听请求状态变化,并在请求完成时检查 HTTP 状态码,调用相应的回调函数。
  • 处理网络错误和超时错误。
  • 打开请求,设置请求头和响应类型,并发送请求。

代码:

复制代码
const SERVER_URL = "test.json"
// 创建请求
const xhr = new XMLHttpRequest();
// 设置超时时间
const timeout = 1000;
// 成功的回调函数
function onSuccess(res){
  console.log("Success:" ,  res)
}
// 失败的回调函数
function onError(res){
  console.log("Error:" , res)
}

// 监听状态:包括ajax的和http的
xhr.onreadystatechange = () => {
  if (xhr.readyState !== 4) return;
  if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) {
   onSuccess(xhr.response);
  }else {
    onError(xhr.response)
  }
};
// 错误的情况
xhr.onerror = function() {
 onError("错啦"+xhr.response);
};2
// 超时的情况
xhr.ontimeout = function(){
  onError("超时啦"+xhr.response);
}
// 先open
xhr.open("GET", SERVER_URL, true);
// 设置请求头
xhr.setRequestHeader("Accept", "application/json");
// 设置请求类型
xhr.responseType = "json";
// 发送请求
xhr.send(null);
`
相关推荐
kyriewen1 小时前
今年裁了16万技术人——但字节前端岗反而涨了23%
前端·javascript·面试
leoZ2312 小时前
AI 辅助开发的五道坎
开发语言·人工智能·视觉检测·bert·php·超分辨率重建·openvino
程序员老陆2 小时前
Qt的QThread::usleep和FFmpeg的libavutil模块的av_usleep哪个精度高一些?
开发语言·qt·ffmpeg·音视频
2601_963869952 小时前
【计算机毕业设计】基于Java的相框定制系统的设计与实现
java·开发语言·课程设计
王林不想说话3 小时前
ES6 到 ES2026 全面进阶指南:新特性、原理、示例与工程落地
前端·javascript·面试
WZzz3 小时前
JavaScript 中 this 的「指向」完整教程
javascript
名字还没想好☜3 小时前
Go 的 unsafe.Pointer 实战:零拷贝 []byte↔string 转换与三条铁律
开发语言·后端·golang·go·unsafe
mONESY3 小时前
浏览器里跑 DeepSeek-R1,这份 worker.js 到底写了什么
javascript
用户6919026813393 小时前
用浏览器 WebGPU跑DPSK大模型(1) - 模型的下载和前端下载进度的显示
javascript·react.js·架构
夏幻灵4 小时前
Vue 2 与 Vue 3 在应用初始化上的设计差异与技术演进
前端·javascript·vue.js