一些常用的AJax的请求状态(readyState)以及状态码(status)的值及其含义

本文详细介绍了在JavaScript中使用Ajax时,如何通过监听XMLHttpRequest对象的状态来判断请求进度。重点讲解了readyState的不同值所代表的意义及常用的状态码(如200、304、404等)及其含义。

以下仅作为本人笔记,记录下来方便以后查阅,若有不妥,谢谢指出。

在javascript里面写AJax的时,最关键的一步是对XMLHttpRequest对象建立监听,即使用“onreadystatechange”方法。监听的时候,要对XMLHttpRequest对象的请求状态进行判断,通常是判断readyState的值为4且status的值为200或者304时执行我们需要的操作。以下记录了一些常用readState以及status的值及其含义

readyState 属性表示Ajax请求的当前状态。它的值用数字代表。
0 代表未初始化。 还没有调用 open 方法
1 代表正在加载。 open 方法已被调用,但 send 方法还没有被调用
2 代表已加载完毕。send 已被调用。请求已经开始
3 代表交互中。服务器正在发送响应
4 代表完成。响应发送完毕

常用状态码(status)及其含义:

404 没找到页面(not found)
403 禁止访问(forbidden)
500 内部服务器出错(internal service error)
200 一切正常(ok)
304 没有被修改(not modified)(服务器返回304状态,表示源文件没有被修改 )


<think>我们正在讨论AJAX请求状态码。用户之前询问如何设置AJAX请求为GET方式,现在他询问AJAX请求中表示请求已发送的状态码是什么。根据引用[1]:AJAX状态readyState)表示请求的不同阶段,范围从0到4。具体来说:0:请求未初始化(尚未调用open方法)1:服务器连接已建立(已经调用open方法,但尚未调用send方法)2:请求已接收(已经调用send方法,且已经接收到响应头)3:请求处理中(正在下载响应体,此时部分数据可用)4:请求已完成,且响应已就绪(整个请求完成)用户问的是“请求已发送”的状态码。在AJAX中,当我们调用send()方法后,请求就会被发送出去。此时,readyState会经历状态1(已建立连接)到状态2(请求已发送且接收到响应头)等。注意:这里用户问的是“状态码”,但实际上在AJAX中,我们通常说的是“状态”(readyState),而不是HTTP状态码(如200,404等)。HTTP状态码由服务器返回,表示请求的结果(成功、失败等),而readyState是表示AJAX请求过程的状态。根据引用[3]中的示例代码,在调用send()方法后,当readyState为2时,表示请求已发送并且已经接收到响应头(即请求已接收),但此时响应体可能还未完全下载。所以,严格来说,在调用send()方法后,请求就已经发送了,但readyState会从1变为2、3、4。但是,用户可能想知道的是请求已经发送出去的状态。在readyState为2的时候,我们可以认为请求已经发送并且服务器已经收到了请求(因为已经返回了响应头)。不过,请注意,在调用send()方法之后,readyState会立即变为1(因为连接已经建立,请求正在发送),然后很快变为2(请求已发送并接收到响应头)。因此,我们通常不会单独关注“请求已发送”这个状态,因为它在readyState状态变化中是一个短暂的过程。但是,如果一定要说一个表示请求已发送的状态,那么readyState为2可以视为请求已发送并且服务器已经开始处理(因为已经返回了响应头信息)。另外,请注意区分:-AJAXreadyState状态):0,1,2,3,4-HTTP状态码status):200,404,500等所以,回答用户:AJAX请求中表示请求已发送的状态(注意不是HTTP状态码)是2(即已经接收到响应头)。但是,为了确保准确,我们再回顾一下引用[1]中的描述:1=>载入(已经调用open方法,但尚未调用send方法)2=>载入完成(已经调用send方法,且已经接收到响应头)所以,在状态2时,我们才能确认请求已经发送完毕并且服务器已经返回了响应头。另外,引用[3]中的代码示例也显示了在readyState为2时,尝试打印响应文本(虽然此时响应体可能还没有完全下载)。因此,我们可以这样回答:AJAX请求中,表示请求已发送并接收到响应头的状态readyState)是2。此时,可以通过xhr对象的getResponseHeader()等方法获取响应头信息。需要注意的是,在状态2时,响应体可能还未完全下载,因此响应体内容可能还不完整。同时,我们也要指出,在调用send()方法后,请求就会被发送出去,但readyState会从1开始变化到2(以及后面的3和4)。如果用户指的是HTTP状态码,那么HTTP状态码是在readyState为4时才能获取(xhr.status),它表示服务器处理请求后的状态(如200表示成功)。而“请求已发送”这个动作本身并不直接对应一个HTTP状态码。所以,我们回答的重点应该是AJAXreadyState状态2。最后,我们按照用户要求生成相关问题。</think> ### AJAX 请求已发送的状态AJAX 请求中,表示**请求已发送**的状态readyState)是 $2$[^1][^3]。这是 XMLHttpRequest 对象生命周期的关键阶段,具体对应 `HEADERS_RECEIVED` 状态。 #### AJAX 状态详解 ($0-4$) 1. **$0$ - UNINITIALIZED**:请求未初始化(尚未调用 `open()` 方法) 2. **$1$ - LOADING**:服务器连接已建立(已调用 `open()` 但未调用 `send()`) 3. **$2$ - LOADED**:**请求已发送且响应头已接收**(关键阶段)[^1][^3] 4. **$3$ - INTERACTIVE**:请求处理中(响应体正在接收) 5. **$4$ - COMPLETED**:请求已完成(响应数据就绪) #### 检测请求发送状态的代码示例 ```javascript const xhr = new XMLHttpRequest(); console.log("初始状态:", xhr.readyState); // 0 xhr.open("GET", "https://api.example.com/data", true); console.log("连接建立:", xhr.readyState); // 1 // 关键:监听状态变化 xhr.onreadystatechange = function() { console.log("当前状态:", xhr.readyState); if (xhr.readyState === 2) { // 请求已发送,响应头可读取 console.log("响应状态码:", xhr.status); console.log("响应头:", xhr.getAllResponseHeaders()); } if (xhr.readyState === 4) { // 请求完成 console.log("完整响应:", xhr.responseText); } }; xhr.send(); // 触发状态从1到2的转变 ``` #### 注意事项 1. 状态 $2$ 表示服务器已接收到请求并返回响应头,但响应体尚未完全传输[^1][^3] 2. 在此状态可通过 `xhr.status` 获取 HTTP 状态码(如 $200$, $404$ 等) 3. 可通过 `xhr.getAllResponseHeaders()` 读取响应头信息 4. **此状态不保证请求成功**,只表示请求已发送并收到初步响应[^2] --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值