XMLHttpRequest
get请求使用
javascript
const xhr = new XMLHttpRequest();
xhr.open("GET", "/data/test.json", true);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
alert(xhr.responseText);
} else {
console.log("其他情况");
}
}
};
xhr.send(null);
post请求
javascript
const xhr = new XMLHttpRequest();
xhr.open("POST", "/data/test.json", true);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
alert(xhr.responseText);
} else {
console.log("其他情况");
}
}
};
const postData = {
userName: "zhangsan",
password: "xxx",
};
xhr.send(JSON.stringify(postData));
xhr.readyState

用的最多的还是4
xhr.status
手写AJAX
javascript
function myAjax(url, method = "GET", data = null, headers = {}) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open(method, url, true);
for (const [key, value] of Object.entries(headers)) {
xhr.setRequestHeader(key, value);
}
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300) {
try {
const response = xhr.responseText
? JSON.parse(xhr.responseText)
: null;
resolve(response);
} catch (error) {
reject(new Error("JSON解析失败"));
}
} else {
const errorMap = {
400: "请求参数错误",
401: "未授权",
403: "禁止访问",
404: "资源未找到",
500: "服务器内部错误",
};
reject(
new Error(errorMap[xhr.status] || `请求失败,状态码:${xhr.status}`)
);
}
}
};
xhr.send(method.toUpperCase() === "GET" ? null : data);
});
}
ajax的常见使用
-
传统 XMLHttpRequest:兼容性好,适合旧项目。
-
Fetch API:现代、简洁,推荐用于新项目。
-
Axios:功能强大,适合企业级应用。
存储
cookie

缺点

localStorage和sessionStorage

区别
