处理服务器响应状态
在这一步中,你将学习如何处理 XMLHttpRequest 的不同状态并处理服务器响应。我们将更新 ajax-demo.html
文件,演示响应处理。
在 WebIDE 中打开 ~/project/ajax-demo.html
文件,并修改脚本部分:
<!doctype html>
<html>
<head>
<title>Server Response Handling</title>
</head>
<body>
<h1>AJAX Response States</h1>
<button id="fetchData">Fetch Data</button>
<div id="result"></div>
<script>
document
.getElementById("fetchData")
.addEventListener("click", function () {
var xhr = new XMLHttpRequest();
var resultDiv = document.getElementById("result");
// 跟踪请求状态
xhr.onreadystatechange = function () {
// 记录当前 ready state
console.log("Ready State:", xhr.readyState);
// 检查请求是否完成且成功
if (xhr.readyState === 4) {
if (xhr.status === 200) {
// 成功响应
try {
var data = JSON.parse(xhr.responseText);
resultDiv.innerHTML = `
<h3>Data Received:</h3>
<pre>${JSON.stringify(data, null, 2)}</pre>
`;
console.log("Request Successful");
} catch (error) {
resultDiv.innerHTML = "Error parsing response";
console.error("Parsing Error:", error);
}
} else {
// 错误处理
resultDiv.innerHTML = `Error: ${xhr.status}`;
console.error("Request Failed", xhr.status);
}
}
};
// 配置并发送请求
xhr.open("GET", "https://jsonplaceholder.typicode.com/posts/1", true);
xhr.send();
});
</script>
</body>
</html>
XMLHttpRequest 的 Ready States
XMLHttpRequest 有 5 种 ready state:
- 0: UNSENT(请求未初始化)
- 1: OPENED(连接已建立)
- 2: HEADERS_RECEIVED(请求已接收)
- 3: LOADING(正在处理请求)
- 4: DONE(请求完成)
响应处理的关键概念
- 使用
onreadystatechange
跟踪请求进度
- 检查
readyState === 4
以确认请求完成
- 验证
status === 200
以确保响应成功
- 使用
responseText
或 responseXML
访问数据
- 针对不同的状态码实现错误处理
示例输出
当你点击“Fetch Data”时,你将看到控制台日志:
Ready State: 1
Ready State: 2
Ready State: 3
Ready State: 4
Request Successful