一、AJAX的使用
var request = false;
//初始化一个布尔变量,赋值false,由于J_ava_S_cript是弱类型语言,所以后边可以把布尔变量转成其他类型变量
try {
request = new XMLHttpRequest();
//先用普通方式初始化XMLHttpRequest对象,这是AJAX的核心
} catch (trymicrosoft) {
//由于IE7以下IE版本(不包括IE7)不支持普通方式初始化XMLHttpRequest对象
try {
//所以在普通初始化时会发生异常
request = new ActiveXObject("Msxml2.XMLHTTP");
//所以尝试用IE的方式初始化XMLHttpRequest对象,这是IE5.5及IE6版本的
} catch (othermicrosoft) {
//如果还发生异常,说明是IE的更低版本了
try {
request = new ActiveXObject("
Microsoft.XMLHTTP");
//这是更低版本的初始化XMLHttpRequest对象的方式} catch (failed) {
//如果还发生异常,说明浏览器不支持XMLHttpRequest对象,这是很老版本的浏览器才会发生的情况
request = false;
//让request对象保持布尔变量,并且赋值false
}
}
}
if (!request)
//如果request的值还是false,则说明用户的浏览器不支持XMLHttpRequest对象
alert("AJAX初始化错误!");
//提示用户他的浏览器不支持AJAX,在用户访问页面时就提示
//用户他的浏览器不支持AJAX,总比等用户费时费里填完表单
//在用户提交时再提示用户不支持效果要好,这样也许等用户
//换了浏览器了还会来访问网站,如果是提交时才提示,用户
//肯定很郁闷,估计就不会再来访问你的网站了,所以把
//初始化XMLHTTPRequest对象的代码放在方法外,在载入
//页面时就初始化是必要的,当然也可以写到方法里在页面
//载入时调用初始化方法,至于用什么方式那看程序员的习惯了
function checkUserId(userId) {
//这是运行AJAX的方法,用来检测这个用户名是否被注册
var url = "servlets/CheckUserId?userId="+userId;
//这是AJAX向服务器发送请求的连接,指定向服务器哪个页面发送请求,以及要传
//给服务器的值,这里是一个servlet
request.open("GET", url, true);
//打开连接,就像比赛时的"预备",此时没有向服务器发送任何数据
request.onreadystatechange = updatePage;
//指定服务器处理完请求后调用的方法,此方法用来改变页面里的某些东西,以体现出
//"无刷新"的效果,就像是在本地运行的程序一样
request.send(null);
//向服务器发送请求,此时才向服务器发送数据,send是以POST方式发送请求时才放数据进去,此处用的是GET
//方式,所以里边参数为null
}
function updatePage() {
//这是刚才指定的服务器处理完请求后的回调方法
if (request.readyState == 4){
//判断HTTP就绪状态,因为状态每改变一次就会调用一次方法,而就绪状态有5种,分别是
//0:请求没有发出(在调用 open() 之前)。
//1:请求已经建立但还没有发出(调用 send() 之前)。
//2:请求已经发出正在处理之中(这里通常可以从响应得到内容头部)。
//3:请求已经处理,响应中通常有部分数据可用,但是服务器还没有完成响应。
//4:响应已完成,可以访问服务器响应并使用它。
//所以要当响应完成时才执行页面更新
if (request.status == 200){
//检查HTTP状态码,等于200时说明服务器正常处理完数据,404是找不到页面,500是服务器运行错误,其他
//的状态码请查阅相关资料
if(request.responseText=="true"){
//responseText属性包含的是服务器返回的信息,这里我只返回了true或false
document.getElementById("info1").innerHTML ="用户名符合要求,请继续!";
//如果服务器返回的是trun,说明可以用这个ID注册
document.getElementById("info1").className = 'true';
//这是改变DIV的CLASS,也就是改变DIV的样式
}else{
//由于只返回了2个值,所以不是true那当然是false了,说明不能用这个ID注册
document.getElementById("info1").innerHTML ="用户名已存在,请重新输入!";
document.getElementById("info1").className = 'fall';
}
}else if (request.status == 404){
//如果HTTP状态码是404,说明要发送请求的页面不存在
alert("Request URL does not exist");
}
else{
//如果是其他的状态码,就不做处理了,直接提示状态码,这个一般是给程序员调试时看的,正常情况下用户是不会看到这个提示的
alert("Error: status code is " + request.status);
}
}
}
页面里是这样的,这里只给出调用AJAX的HTML标签
又是5Q的字符串过滤问题,NND,我把会被过滤的字符串中间加了个下划线,代码里没有的
<in_put ty_pe="text" on_Focus="checkUserId(this.value);">
二、几种状态的说明
对应的HTTP的状态,见下表:
status状态值
长整形标准http状态码,定义如下: Number Description
100 Continue
101 Switching protocols
200 OK
201 Created
202 Accepted
203 Non-Authoritative Information
204 No Content
205 Reset Content
206 Partial Content
300 Multiple Choices
301 Moved Permanently
302 Found
303 See Other
304 Not Modified
305 Use Proxy
307 Temporary Redirect
400 Bad Request
401 Unauthorized
402 Payment Required
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable
407 Proxy Authentication Required
408 Request Timeout
409 Conflict
410 Gone
411 Length Required
412 Precondition Failed
413 Request Entity Too Large
414 Request-URI Too Long
415 Unsupported Media Type
416 Requested Range Not Suitable
417 Expectation Failed
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
505 HTTP Version Not Supported
xmlHttp.status的值(HTTP状态表)
0**:未被始化
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版本
1xx:信息响应类,表示接收到请求并且继续处理
2xx:处理成功响应类,表示动作被成功接收、理解和接受
3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
5xx:服务端错误,服务器不能正确执行一个正确的请求