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);
`
相关推荐
sunly_7 分钟前
Flutter:导航固定背景图,滚动时导航颜色渐变
android·javascript·flutter
摸鱼仙人~15 分钟前
深入理解Java单例模式:确保类只有一个实例
java·javascript·单例模式
SteveDraw19 分钟前
C++动态链接库封装,供C#/C++ 等编程语言使用——C++动态链接库概述(总)
开发语言·c++·c#·封装·动态链接库
十五年专注C++开发28 分钟前
设计模式之单例模式(二): 心得体会
开发语言·c++·单例模式·设计模式
Hilaku30 分钟前
为什么我们用了 Vite 还是构建慢?——真正的优化在这几步
前端·javascript·vite
MrSkye1 小时前
🚀 由Tony Stark 带你入门 JavaScript(新手向)🚀
前端·javascript·面试
掘金安东尼1 小时前
仅仅是发送一封邮件?暴露安全边界!
javascript·vue.js·面试
穗余1 小时前
WEB3全栈开发——面试专业技能点P1Node.js / Web3.js / Ethers.js
javascript·node.js·web3