前言
ajax是现在和服务器主流交互,完全不能少的技术。但很多时候我们对这个错误的原因不太明白,比如初学者最容易犯的错就是,为什么参数传不到后端,一看错误信息,又不知道是什么意思。导致浪费大量时间。现在整理了一份详细的ajaxError参数说明文档。希望大家有用。
ajax原理图
监听错误demo
$(document).ajaxError( function (event, XMLHttpRequest, ajaxOptions, thrownError) {
// thrownError 只有当异常发生时才会被传递 this;
alert("Error requesting " + ajaxOptions.url + ": " + XMLHttpRequest.status + " " + XMLHttpRequest.statusText);
} );
event 对象详解
当在页面上的任何Ajax请求发生某些事件(如初始化或完成)时,这些方法将注册程序。全局事件,如果每个Ajax请求global产物jQuery.ajaxSetup()是true,它是默认。注意:跨域脚本或JSONP请求不会触发全局事件,无论其值如何global。
事件 | 含义 |
---|---|
.ajaxComplete() | 注册在Ajax请求完成时调用的处理程序。 |
.ajaxError() | 当Ajax请求完成并发生错误时,注册要调用的处理程序。 |
.ajaxSend() | 在发送Ajax请求之前附加要执行的函数。 |
.ajaxStart() | 注册第一个Ajax请求开始时调用的处理程序。 |
.ajaxStop() | 当所有Ajax请求完成时,注册要调用的处理程序。 |
.ajaxSuccess() | 当Ajax请求成功完成时,附加要执行的函数。 |
HMLHttpRequest 对象详解
与传统Web应用中发送请求不同,Ajax 必须以编程方式来发送请求。在请求发送出去之后,服务器相应会在适当的时候返回,但客户端浏览器不会自动加载这种异步响应,程序必须先调用HMLHttpRequest对象的responseText或responseXML来获取服务器响应,再通过DOM操作将服务器响应动态加载到当前页面中。
XMLHttpRequest.readyState
该属性用于获取XMLHttpRequest对象的处理状态。
状态 | 含义 |
---|---|
0 | (未初始化) (XMLHttpRequest)对象已经创建,但还没有调用open()方法。 |
1 | (载入)已经调用open() 方法,但尚未发送请求。 |
2 | (载入完成)send()方法执行完成,已经接收到全部响应内容 。 |
3 | (交互)对象开始读取服务器的响应。 |
4 | (完成)响应内容解析完成,可以在客户端调用了。 |
XMLHttpRequest.status
该属性是服务器返回的状态码,只有当服务器的响应已经完成时,才会有该状态码。也就是说,XMLHttpRequest的readyState为4,才会有状态码。
1xx - 信息提示
这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应。
状态 | 含义 |
---|---|
100 | Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新) |
101 | (Switching Protocols 服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新) |
2xx - 成功
这类状态代码表明服务器成功地接受了客户端请求。
状态 | 含义 |
---|---|
200 | OK 一切正常,对GET和POST请求的应答文档跟在后面。 |
201 | Created 服务器已经创建了文档,Location头给出了它的URL。 |
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。这个错误代码 | |
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 映射策略阻止本请求。 |
5xx-服务器错误
服务器由于遇到错误而不能完成该请求。
一级状态 | 二级状态 | 含义 |
---|---|---|
500 | 内部服务器错误。 | |
500.12 | 应用程序正忙于在Web服务器上重新启动。 | |
500.13 | Web服务器太忙。 | |
500.15 | 不允许直接请求Global.asa。 | |
500.16 | UNC授权凭据不正确。这个错误代码为IIS6.0所专用。 | |
500.18 | URL授权存储不能打开。这个错误代码为IIS6.0所专用。 | |
500.100 | 内部ASP错误。 | |
501 | 页眉值指定了未实现的配置。 | |
502 | Web服务器用作网关或代理服务器时收到了无效响应。 | |
502.1 | CGI应用程序超时。 | |
502.2 | CGI应用程序出错。application. | |
503 | 服务不可用。这个错误代码为IIS6.0所专用。 | |
504 | 网关超时。 | |
505 | HTTP版本不受支持。 |
FTP
1xx-肯定的初步答复
这些状态代码指示一项操作已经成功开始,但客户端希望在继续操作新命令前得到另一个答复。
状态 | 含义 |
---|---|
110 | 重新启动标记答复。 |
120 | 服务已就绪,在nnn分钟后开始。 |
125 | 数据连接已打开,正在开始传输。 |
150 | 文件状态正常,准备打开数据连接。 |
2xx-肯定的完成答复
一项操作已经成功完成。客户端可以执行新命令。
状态 | 含义 |
---|---|
200 | 命令确定。 |
202 | 未执行命令,站点上的命令过多。 |
211 | 系统状态,或系统帮助答复。 |
212 | 目录状态。 |
213 | 文件状态。 |
214 | 帮助消息。 |
215 | NAME系统类型,其中,NAME是AssignedNumbers文档中所列的正式系统名称。 |
220 | 服务就绪,可以执行新用户的请求。 |
221 | 服务关闭控制连接。如果适当,请注销。 |
225 | 数据连接打开,没有进行中的传输。 |
226 | 关闭数据连接。请求的文件操作已成功(例如,传输文件或放弃文件)。 |
227 | 进入被动模式(h1,h2,h3,h4,p1,p2)。 |
230 | 用户已登录,继续进行。 |
250 | 请求的文件操作正确,已完成。 |
257 | 已创建“PATHNAME”。 |
3xx-肯定的中间答复
该命令已成功,但服务器需要更多来自客户端的信息以完成对请求的处理。
状态 | 含义 |
---|---|
331 | 用户名正确,需要密码。 |
332 | 需要登录帐户。 |
350 | 请求的文件操作正在等待进一步的信息。 |
4xx-瞬态否定的完成答复
该命令不成功,但错误是暂时的。如果客户端重试命令,可能会执行成功。
状态 | 含义 |
---|---|
421 | 服务不可用,正在关闭控制连接。如果服务确定它必须关闭,将向任何命令发送这一应答。 |
425 | 无法打开数据连接。 |
426 | Connectionclosed;transferaborted. |
450 | 未执行请求的文件操作。文件不可用(例如,文件繁忙)。 |
451 | 请求的操作异常终止:正在处理本地错误。 |
452 | 未执行请求的操作。系统存储空间不够。 |
5xx-永久性否定的完成答复
该命令不成功,错误是永久性的。如果客户端重试命令,将再次出现同样的错误。500语法错误,命令无法识别。这可能包括诸如命令行太长之类的错误。
状态 | 含义 |
---|---|
501 | 在参数中有语法错误。 |
502 | 未执行命令。 |
503 | 错误的命令序列。 |
504 | 未执行该参数的命令。 |
530 | 未登录。 |
532 | 存储文件需要帐户。 |
550 | 未执行请求的操作。文件不可用(例如,未找到文件,没有访问权限)。 |
551 | 请求的操作异常终止:未知的页面类型。 |
552 | 请求的文件操作异常终止:超出存储分配(对于当前目录或数据集)。 |
553 | 未执行请求的操作。不允许的文件名。 |
textStatus 对象详解
返回的是字符串类型,表示返回的状态,根据服务器不同的错误。
状态 | 含义 |
---|---|
timeout | 超时 |
error | 错误 |
abort | 中止 |
parsererror | 解析错误 |
success | 成功 |
notmodified | 服务器告诉客户,原来缓冲的文档还可以继续使用。 |
null | 链接错误 |
ajaxOptions 对象详解
请求ajax发送的参数。
状态 | 类型 | 含义 |
---|---|---|
url | String | (默认: 当前页地址) 发送请求的地址。 |
type | String | (默认: “GET”) 请求方式 (“POST” 或 “GET”), 默认为 “GET”。注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持。 |
timeout | Number | 设置请求超时时间(毫秒)。此设置将覆盖全局设置。 |
async | Boolean | (默认: true) 默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。 |
beforeSend | Function | 发送请求前可修改 XMLHttpRequest 对象的函数,如添加自定义 HTTP 头。XMLHttpRequest 对象是唯一的参数。function (XMLHttpRequest) {this; // the options for this ajax request} |
cache | Boolean | (默认: true) jQuery 1.2 新功能,设置为 false 将不会从浏览器缓存中加载请求信息。 |
complete | Function | 请求完成后回调函数 (请求成功或失败时均调用)。参数: XMLHttpRequest 对象,成功信息字符串。function (XMLHttpRequest, textStatus) {this; // the options for this ajax request} |
contentType | String | (默认: “application/x-www-form-urlencoded”) 发送信息至服务器时内容编码类型。默认值适合大多数应用场合。 |
data | Object,String | 发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL 后。查看 processData 选项说明以禁止此自动转换。必须为 Key/Value 格式。如果为数组,jQuery 将自动为不同值对应同一个名称。如 {foo:[“bar1”, “bar2”]} 转换为 ‘&foo=bar1&foo=bar2’。 |
dataType | String | 预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息返回 responseXML 或 responseText,并作为回调函数参数传递,可用值: “xml”: 返回 XML 文档,可用 jQuery 处理。”html”: 返回纯文本 HTML 信息;包含 script 元素。”script”: 返回纯文本 JavaScript 代码。不会自动缓存结果。”json”: 返回 JSON 数据 。”jsonp”: JSONP 格式。使用 JSONP 形式调用函数时,如 “myurl?callback=?” jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。 |
error | Function | (默认: 自动判断 (xml 或 html)) 请求失败时将调用此方法。这个方法有三个参数:XMLHttpRequest 对象,错误信息,(可能)捕获的错误对象。function (XMLHttpRequest, textStatus, errorThrown) { // 通常情况下textStatus和errorThown只有其中一个有值 this; // the options for this ajax request} |
global | Boolean | (默认: true) 是否触发全局 AJAX 事件。设置为 false 将不会触发全局 AJAX 事件,如 ajaxStart 或 ajaxStop 。可用于控制不同的Ajax事件 |
ifModified | Boolean | (默认: false) 仅在服务器数据改变时获取新数据。使用 HTTP 包 Last-Modified 头信息判断。 |
processData | Boolean | (默认: true) 默认情况下,发送的数据将被转换为对象(技术上讲并非字符串) 以配合默认内容类型 “application/x-www-form-urlencoded”。如果要发送 DOM 树信息或其它不希望转换的信息,请设置为 false。 |
success | Function | 请求成功后回调函数。这个方法有两个参数:服务器返回数据,返回状态function (data, textStatus) { // data could be xmlDoc, jsonObj, html, text, etc…this; // the options for this ajax request} |
errorThrown 对象详解
也是字符串类型,表示服务器抛出返回的错误信息,如果产生的是HTTP错误,那么返回的信息就是HTTP状态码对应的错误信息,比如404的Not Found,500错误的Internal Server Error。
补充信息
是否异步请求使用
async 为 true 或 false。
async=true 时,JavaScript 无需等待服务器的响应,可以在等待服务器响应的同时执行其他脚本,当响应完成后再对返回的数据进行处理,所以,AJAX 请求与其他脚本的执行是分开的,互不影响。
async=false 时,JavaScript 会等到服务器响应完成后才继续执行其他脚本,如果服务器繁忙或缓慢,JavaScript 会一直等待,可能会挂起或停止。这种方式只适用于一些小而简单的请求。
不推荐使用async = false,但是对于一些小的请求,这可以确定。
请记住,JavaScript将不会继续执行,直到服务器响应准备就绪。如果服务器忙或慢,应用程序将挂起或停止。