`

AJAX请求时status返回状态明细表

阅读更多
AJAX请求时status返回状态明细表 readyState的五种状态2010-03-04 18:24对于readyState的五种状态的描述或者说定义,很多Ajax书(英文原版)中大都语焉不详
在《Pragmatic Ajax A Web 2.0 Primer 》中偶然看到对readyStae状态的介绍,感觉这个介绍很实在……
比较理想的解释方法应该以“状态:任务(目标)+过程+表现(或特征)”的表达模式来对这几个状态进行定义

【全文】

在《Pragmatic Ajax A Web 2.0 Primer 》中偶然看到对readyStae状态的介绍,感觉这个介绍很实在,摘译如下:



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 - (完成)响应内容解析完成,可以在客户端调用了


在《Understanding AJAX: Using JavaScript to Create Rich Internet Applications》中,则用下表进行了说明:
表1. readyState Levels readyState Status Code
Status of the XMLHttpRequest Object

(0) UNINITIALIZED
未初始化
The object has been created but not initialized. (The open method has not been called.)
(XMLHttpRequest)对象已经创建,但尚未初始化(还没有调用open方法)。

(1) LOADING
载入
The object has been created, but the send method has not been called.
(XMLHttpRequest)对象已经创建,但尚未调用send方法。

(2) LOADED
载入完成
The send method has been called, but the status and headers are not yet available.
已经调用send方法,(HTTP响应)状态及头部还不可用。

(3) INTERACTIVE
交互
Some data has been received. Calling the responseBody and responseText properties at this state to obtain partial results will return an error, because status and response headers are not fully available.
已经接收部分数据。但若在此时调用responseBody和responseText属性获取部分结果将会产生错误,因为状态和响应头部还不完全可用。

(4) COMPLETED
完成
All the data has been received, and the complete data is available in the responseBody and responseText properties.
已经接收到了全部数据,并且在responseBody和responseText属性中可以提取到完整的数据。


根 据以上几本书中的关于readyState五种状态的介绍,我认为还是《Pragmatic Ajax A Web 2.0 Primer 》比较到位,因为它提到了对接收到的数据的解析问题,其他书中都没有提到这一点,而这一点正是“(3)交互”阶段作为一个必要的转换过程存在于“(2)载入完成”到“(4)完成”之间的理由,也就是其任务是什么。归结起来,我觉得比较理想的解释方法应该以“状态:任务(目标)+过程+表现(或特征)”表达模式来对这几个状态进行定义比较准确,而且让人容易理解。现试总结如下:

表2. readyState 状态详解 readyState 状态
状态说明

(0)未初始化
此阶段确认XMLHttpRequest对象是否创建,并为调用open()方法进行未初始化作好准备。值为0表示对象已经存在,否则浏览器会报错--对象不存在。

(1)载入
此阶段对XMLHttpRequest对象进行初始化,即调用open()方法,根据参数(method,url,true)完成对象状态的设置。并调用send()方法开始向服务端发送请求。值为1表示正在向服务端发送请求。

(2)载入完成
此阶段接收服务器端的响应数据。但获得的还只是服务端响应的原始数据,并不能直接在客户端使用。值为2表示已经接收完全部响应数据。并为下一阶段对数据解析作好准备。

(3)交互
此阶段解析接收到的服务器端响应数据。即根据服务器端响应头部返回的MIME类型把数据转换成能通过responseBody、responseText或responseXML属性存取的格式,为在客户端调用作好准备。状态3表示正在解析数据。

(4)完成
此阶段确认全部数据都已经解析为客户端可用的格式,解析已经完成。值为4表示数据解析完毕,可以通过XMLHttpRequest对象的相应属性取得数据。


概而括之,整个XMLHttpRequest对象的生命周期应该包含如下阶段:
创建-初始化请求-发送请求-接收数据-解析数据-完成

在具体应用中,明确了readyState的五个状态(XMLHttpRequest对象的生命周期各个阶段)的含义,就可以消除对Ajax核心的神秘感(语焉不详的背后要么是故弄玄虚,制造神秘感;要么就是“以其昏昏,使人昭昭”),迅速把握其实质,对减少学习中的挫折感和增强自信心都极其有益。

比如,通过如下示例:



       AJAX中请求远端文件、或在检测远端文件是否掉链时,都需要了解到远端服务器反馈的状态以确定文件的存在与否。
当然,在我们平常浏览网页时,也会发现一些文件不存在时显示为“404错误”,这就是常见的Http请求状态(status)
Web服务器响应浏览器或其他客户程序的请求时,其应答一般由以下几个部分组成:一个状态行,几个应答头,一个空行,内容文档。下面是一个最简单的应答:
状态行包含HTTP版本、状态代码、与状态代码对应的简短说明信息。在大多数情况下,除了Content-Type之外的所有应答头都是可选的。但Content-Type是必需的,它描述的是后面文档的MIME类型。虽然大多数应答都包含一个文档,但也有一些不包含,例如对HEAD请求的应答永远不会附带文档。有许多状态代码实际上用来标识一次失败的请求,这些应答也不包含文档(或只包含一个简短的错误信息说明)。
当用户试图通过 HTTP 访问一台正在运行 Internet 信息服务 (IIS) 的服务器上的内容时,IIS 返回一个表示该请求的状态的数字代码。状态代码可以指明具体请求是否已成功,还可以揭示请求失败的确切原因。

1xx - 信息提示
        这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应。
        · 100 - Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新)
        · 101 - Switching Protocols 服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新)

2xx - 成功
        这类状态代码表明服务器成功地接受了客户端请求。
        · 200 - OK 一切正常,对GET和POST请求的应答文档跟在后面。
        · 201 - Created 服务器已经创建了文档,Location头给出了它的URL。
        · 202 - Accepted 已经接受请求,但处理尚未完成。
        · 203 - Non-Authoritative Information 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝,非权威性信息(HTTP 1.1新)。
        · 204 - No Content 没有新文档,浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。
        · 205 - Reset Content 没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容(HTTP 1.1新)。
        · 206 - Partial Content 客户发送了一个带有Range头的GET请求,服务器完成了它(HTTP 1.1新)。

3xx - 重定向
        客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。
        · 300 - Multiple Choices 客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在Location应答头指明。
        · 301 - Moved Permanently 客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。
        · 302 - Found 类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。注意,在HTTP1.0中对应的状态信息是“Moved Temporatily”。出现该状态代码时,浏览器能够自动访问新的URL,因此它是一个很有用的状态代码。注意这个状态代码有时候可以和301替换使用。例如,如果浏览器错误地请求 http://host/~user (缺少了后面的斜杠),有的服务器返回301,有的则返回302。严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。请参见307。
        · 303 - See Other 类似于301/302,不同之处在于,如果原来的请求是POST,Location头指定的重定向目标文档应该通过GET提取(HTTP 1.1新)。
        · 304 - Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。
        · 305 - Use Proxy 客户请求的文档应该通过Location头所指明的代理服务器提取(HTTP 1.1新)。
        · 307 - Temporary Redirect 和302(Found)相同。许多浏览器会错误地响应302应答进行重定向,即使原来的请求是POST,即使它实际上只能在POST请求的应答是303时才能重定向。由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GET和POST请求;如果是307应答,则浏览器只能跟随对GET请求的重定向。(HTTP 1.1新)

4xx - 客户端错误
        发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。
        · 400 - Bad Request 请求出现语法错误。
        · 401 - Unauthorized 访问被拒绝,客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求。IIS 定义了许多不同的 401 错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在 IIS 日志中显示:
        · 401.1 - 登录失败。
        · 401.2 - 服务器配置导致登录失败。
        · 401.3 - 由于 ACL 对资源的限制而未获得授权。
        · 401.4 - 筛选器授权失败。
        · 401.5 - ISAPI/CGI 应用程序授权失败。
        · 401.7 – 访问被 Web 服务器上的 URL 授权策略拒绝。这个错误代码为 IIS 6.0 所专用。
        · 403 - Forbidden 资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。禁止访问:IIS 定义了许多不同的 403 错误,它们指明更为具体的错误原因:
        · 403.1 - 执行访问被禁止。
        · 403.2 - 读访问被禁止。
        · 403.3 - 写访问被禁止。
        · 403.4 - 要求 SSL。
        · 403.5 - 要求 SSL 128。
        · 403.6 - IP 地址被拒绝。
        · 403.7 - 要求客户端证书。
        · 403.8 - 站点访问被拒绝。
        · 403.9 - 用户数过多。
        · 403.10 - 配置无效。
        · 403.11 - 密码更改。
        · 403.12 - 拒绝访问映射表。
        · 403.13 - 客户端证书被吊销。
        · 403.14 - 拒绝目录列表。
        · 403.15 - 超出客户端访问许可。
        · 403.16 - 客户端证书不受信任或无效。
        · 403.17 - 客户端证书已过期或尚未生效。
        · 403.18 - 在当前的应用程序池中不能执行所请求的 URL。这个错误代码为 IIS 6.0 所专用。
        · 403.19 - 不能为这个应用程序池中的客户端执行 CGI。这个错误代码为 IIS 6.0 所专用。
        · 403.20 - Passport 登录失败。这个错误代码为 IIS 6.0 所专用。
        · 404 - Not Found 无法找到指定位置的资源。这也是一个常用的应答。
        · 404.0 -(无) – 没有找到文件或目录。
        · 404.1 - 无法在所请求的端口上访问 Web 站点。
        · 404.2 - Web 服务扩展锁定策略阻止本请求。
        · 404.3 - MIME 映射策略阻止本请求。
        · 405 - Method Not Allowed 请求方法(GET、POST、HEAD、Delete、PUT、TRACE等)对指定的资源不适用,用来访问本页面的 HTTP 谓词不被允许(方法不被允许)(HTTP 1.1新)
        · 406 - Not Acceptable 指定的资源已经找到,但它的MIME类型和客户在Accpet头中所指定的不兼容,客户端浏览器不接受所请求页面的 MIME 类型(HTTP 1.1新)。
        · 407 - Proxy Authentication Required 要求进行代理身份验证,类似于401,表示客户必须先经过代理服务器的授权。(HTTP 1.1新)
        · 408 - Request Timeout 在服务器许可的等待时间内,客户一直没有发出任何请求。客户可以在以后重复同一请求。(HTTP 1.1新)
        · 409 - Conflict 通常和PUT请求有关。由于请求和资源的当前状态相冲突,因此请求不能成功。(HTTP 1.1新)
        · 410 - Gone 所请求的文档已经不再可用,而且服务器不知道应该重定向到哪一个地址。它和404的不同在于,返回407表示文档永久地离开了指定的位置,而404表示由于未知的原因文档不可用。(HTTP 1.1新)
        · 411 - Length Required 服务器不能处理请求,除非客户发送一个Content-Length头。(HTTP 1.1新)
        · 412 - Precondition Failed 请求头中指定的一些前提条件失败(HTTP 1.1新)。
        · 413 – Request Entity Too Large 目标文档的大小超过服务器当前愿意处理的大小。如果服务器认为自己能够稍后再处理该请求,则应该提供一个Retry-After头(HTTP 1.1新)。
        · 414 - Request URI Too Long URI太长(HTTP 1.1新)。
        · 415 – 不支持的媒体类型。
        · 416 – Requested Range Not Satisfiable 服务器不能满足客户在请求中指定的Range头。(HTTP 1.1新)
        · 417 – 执行失败。
        · 423 – 锁定的错误。

5xx - 服务器错误
        服务器由于遇到错误而不能完成该请求。
        · 500 - Internal Server Error 服务器遇到了意料不到的情况,不能完成客户的请求。
        · 500.12 - 应用程序正忙于在 Web 服务器上重新启动。
        · 500.13 - Web 服务器太忙。
        · 500.15 - 不允许直接请求 Global.asa。
        · 500.16 – UNC 授权凭据不正确。这个错误代码为 IIS 6.0 所专用。
        · 500.18 – URL 授权存储不能打开。这个错误代码为 IIS 6.0 所专用。
        · 500.100 - 内部 ASP 错误。
        · 501 - Not Implemented 服务器不支持实现请求所需要的功能,页眉值指定了未实现的配置。例如,客户发出了一个服务器不支持的PUT请求。
        · 502 - Bad Gateway 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。 亦说Web 服务器用作网关或代理服务器时收到了无效响应。
        · 502.1 - CGI 应用程序超时。
        · 502.2 - CGI 应用程序出错。
        · 503 - Service Unavailable 服务不可用,服务器由于维护或者负载过重未能应答。例如,Servlet可能在数据库连接池已满的情况下返回503。服务器返回503时可以提供一个Retry-After头。这个错误代码为 IIS 6.0 所专用。
        · 504 - Gateway Timeout 网关超时,由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答。(HTTP 1.1新) 。
        · 505 - HTTP Version Not Supported 服务器不支持请求中所指明的HTTP版本。(HTTP

分享到:
评论

相关推荐

    快速解决ajax请求出错状态码为0的问题

    今天在使用 ajax 向后台请求数据时出现错误,提示状态码为 0 ,后台采用的是 spring mvc 架构。 状态码为0是什么意思呢?查找了下,原来它意味着 (未初始化)即没有调用到send()方法,我原来代码如下 : $.ajax...

    ajax重写方法搭配后台filter返回status实现ajax请求跳转登录页面

    通常,当我们发送一个Ajax请求时,我们关注的是成功的200状态码或者错误状态码如404或500。但在需要用户登录的场景下,服务器可能会返回一个非200的状态码,比如401(未经授权)或403(禁止访问)。这时,我们可以...

    AJAX 请求完成时执行函数。Ajax 事件。

    本文将深入探讨"AJAX请求完成时执行的函数"以及相关的Ajax事件。 1. **AJAX请求过程** AJAX请求通常包括以下几个步骤:创建XMLHttpRequest对象、打开连接、发送请求和接收响应。当请求完成时,我们需要执行一些...

    chrome扩展插件获取ajax请求记录

    在开发过程中,还需要注意Chrome的安全策略和权限设置,确保扩展在获取Ajax请求记录时不侵犯用户隐私,并遵循Chrome的扩展开发指南。 总之,Chrome扩展插件获取Ajax请求记录是一项重要的Web开发技能,它可以帮助...

    为jquery的ajax请求添加超时timeout时间的操作方法

    当客户端向服务器发送Ajax请求时,如果服务器没有在合理的时间内响应,就会造成用户界面的卡顿,甚至导致用户的不良体验。 首先,我们来了解下jQuery中Ajax请求的超时timeout属性。在Ajax请求中设置timeout属性可以...

    解决ajax请求后台,有时收不到返回值的问题

    jquery中ajax方法有个属性async用于控制同步和异步,默认是true,即ajax请求默认是异步请求,有时项目中会用到AJAX同步。这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出现

    Ajax请求过程中显示“进度”的简单实现

    Ajax在Web应用中使用得越来越频繁。在进行Ajax调用过程中一般都具有这样的做法:显示一个GIF图片动画表明后台正在工作,...Ajax请求完成被返回响应的结果,结果被呈现出来的同时,GIF图片和“遮罩”同时消失(右)。

    浏览器调试ajax请求

    本示例旨在帮助开发者调试针对Ajax请求的后台接口,确保它们能够正确处理跨域请求、支持Ajax方式并且能返回预期的数据。 首先,我们需要理解什么是跨域问题。由于浏览器的安全策略,同一源策略限制了JavaScript只能...

    一个完整的jquery+ajax传送请求的实例

    总结来说,这个jQuery+AJAX的实例展示了如何利用jQuery的$.ajax方法进行异步数据请求,包括设置请求参数、处理返回数据和异常情况。在实际开发中,我们需要根据项目需求灵活运用这些技巧,以实现高效、友好的前端...

    Ajax异步请求的验证

    1. **请求状态验证**:在`onreadystatechange`事件中,我们通常会检查`readyState`属性,它表示请求的状态,当`readyState`为4时,表示请求已完成;同时检查`status`属性,200表示请求成功。 2. **数据格式验证**:...

    HTML使用极简的方式通过ajax请求实现前后端交互代码实现

    在现代Web开发中,前后端交互是不可或缺的一部分,而AJAX...这个过程的关键在于理解如何构建和发送AJAX请求,以及如何处理服务器返回的数据。在实际开发中,还需要考虑错误处理、跨域问题、安全因素等更多细节。

    Ajax_001【返回String类型】

    // 当状态为4且状态码为200时,表示请求已完成且成功 var serverResponse = xhr.responseText; // 服务器返回的String类型数据 console.log(serverResponse); } }; // 打开到服务器的连接,方法GET,URL是'my...

    Ajax请求django返回json数据到前端

    Ajax请求接口,Django框架下从该接口接收Ajax发送的json数据,同时将新的json数据返回给Ajax,Ajax收到后在js进行处理,然后和页面内容交互。整个数据前后端交互全部采用json格式。代码高度封装,只需要更改json内容...

    Ajax请求session超时处理流程

    Ajax请求session超时处理流程 java服务器端处理: SessionValidateFilter中修改: if (ServerInfo.isAjax(request)) { request.setAttribute("statusCode", 301); request.setAttribute("message", "Session ...

    ajax请求数据

    在处理Ajax请求时,我们还需要关注状态码(status code),例如200表示成功,404表示未找到资源,500表示服务器内部错误等。同时,对于可能出现的错误,应通过error回调函数进行处理。 在实际项目中,Ajax常用于...

    Ajax 中的高级请求和响应

    例如,当状态代码为400时,表明客户端发送的请求无法被服务器解析,可能是由于请求格式错误或缺少必要参数。 **HTTP就绪状态**是XMLHttpRequest对象的readyState属性,它反映了请求的不同阶段。就绪状态分为五个...

    基于JSON的AJAX请求案例

    console.error('请求失败,状态码:' + this.status); } }; xhr.onerror = function() { console.error('请求发生错误'); }; xhr.send(); ``` 在这个例子中,我们创建了一个新的XMLHttpRequest实例,设置了...

    Ajax请求的五个步骤!!!

    当状态变为4并且请求成功时,我们可以处理服务器返回的数据。 ```javascript xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4 && (xmlhttp.status || xmlhttp.status == 304)) { console...

    第2节 ajax请求第三方接口天气预报案例.rar

    接着调用send()方法发送请求,最后监听onreadystatechange事件,当状态改变时检查readyState属性和status属性,确保请求成功。 3. GET与POST请求: - GET请求是最常见的HTTP方法,用于从服务器获取数据。请求的...

    Ajax异步请求简单示例

    当状态改变时,`onreadystatechange`会被调用。例如: ```javascript xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { // 处理成功响应 } else if (xhr.status === ...

Global site tag (gtag.js) - Google Analytics