Ajax状态码

《Pragmatic Ajax A Web 2.0 Primer 》

 0: (Uninitialized) the send( ) method has not yet been invoked. 
 1: (Loading) the send( ) method has been invoked, request in progress. 
 2: (Loaded) the send( ) method has completed, entire response received.
 3: (Interactive) the response is being parsed. 
 4: (Completed) the response has been parsed, is ready for harvesting.

 0 - (未初始化)还没有调用send()方法
 1 - (载入)已调用send()方法,正在发送请求
 2 - (载入完成)send()方法执行完成,已经接收到全部响应内容
 3 - (交互)正在解析响应内容
 4 - (完成)响应内容解析完成,可以在客户端调用了

1- AJAX状态值与状态码区别
AJAX状态值是指,运行AJAX所经历过的几种状态,无论访问是否成功都将响应的步骤,可以理解成为AJAX运行步骤。如:正在发送,正在响应等,由AJAX对象与服务器交互时所得;使用“ajax.readyState”获得。(由数字1~4单位数字组成)
AJAX状态码是指,无论AJAX访问是否成功,由HTTP协议根据所提交的信息,服务器所返回的HTTP头信息代码,该信息使用“ajax.status”所获得;(由数字1XX,2XX三位数字组成,详细查看RFC)
这就是我们在使用AJAX时为什么采用下面的方式判断所获得的信息是否正确的原因。

if(ajax.readyState == 4 && ajax.status == 200) { putData(ajax.responseText);}

2- AJAX运行步骤与状态值说明
在AJAX实际运行当中,对于访问XMLHttpRequest(XHR)时并不是一次完成的,而是分别经历了多种状态后取得的结果,对于这种状态在AJAX中共有5种,分别是。
0 - (未初始化)还没有调用send()方法
1 - (载入)已调用send()方法,正在发送请求
2 - (载入完成)send()方法执行完成,
3 - (交互)正在解析响应内容
4 - (完成)响应内容解析完成,可以在客户端调用了
对于上面的状态,其中“0”状态是在定义后自动具有的状态值,而对于成功访问的状态(得到信息)我们大多数采用“4”进行判断。

3-AJAX状态码说明

1**:请求收到,继续处理
2**:操作成功收到,分析、接受
3**:完成此请求必须进一步处理
4**:请求包含一个错误语法或不能完成
5**:服务器执行一个完全有效请求失败
100——客户必须继续发出请求
101——客户要求服务器根据请求转换HTTP协议版本
200——交易成功
201——提示知道新文件的URL
202——接受和处理、但处理未完成
203——返回信息不确定或不完整
204——请求收到,但返回信息为空
205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206——服务器已经完成了部分用户的GET请求
300——请求的资源可在多处得到
301——删除请求数据
302——在其他地址发现了请求数据
303——建议客户访问其他URL或访问方式
304——客户端已经执行了GET,但文件未变化
305——请求的资源必须从服务器指定的地址得到
306——前一版本HTTP中使用的代码,现行版本中不再使用
307——申明请求的资源临时性删除
400——错误请求,如语法错误
401——请求授权失败
402——保留有效ChargeTo头响应
403——请求不允许
404——没有发现文件、查询或URl
405——用户在Request-Line字段定义的方法不允许
406——根据用户发送的Accept拖,请求资源不可访问
407——类似401,用户必须首先在代理服务器上得到授权
408——客户端没有在用户指定的饿时间内完成请求
409——对当前资源状态,请求不能完成
410——服务器上不再有此资源且无进一步的参考地址
411——服务器拒绝用户定义的Content-Length属性请求
412——一个或多个请求头字段在当前请求中错误
413——请求的资源大于服务器允许的大小
414——请求的资源URL长于服务器允许的长度
415——请求资源不支持请求项目格式
416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求
500——服务器产生内部错误
501——服务器不支持请求的函数
502——服务器暂时不可用,有时是为了防止发生系统过载
503——服务器过载或暂停维修
504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长
505——服务器不支持或拒绝支请求头中指定的HTTP版本

原文地址:http://www.cnblogs.com/sking7/archive/2011/10/19/2217859.html

<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可以视为请求已发送并且服务器已经开始处理(因为已经返回了响应头信息)。另外,请注意区分:-AJAX的readyState(状态值):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状态码。所以,我们回答的重点应该是AJAX的readyState状态值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、付费专栏及课程。

余额充值