正 文

Web2.0 中 Ajax 应用的详解


www.7dspace.com  更新日期:2006-2-23 6:44:30  七度空间


  第二个参数是请求页面的URL。

  第三个参数设置请求是否为异步模式。如果是TRUE,JavaScript函数将继续执行,而不等待服务器响应。这就是"AJAX"中的"A"。

  用JavaScript来创建XMLHttpRequest 类向服务器发送一个HTTP请求后,接下来要决定当收到服务器的响应后,需要做什么。这需要告诉HTTP请求对象用哪一个JavaScript函数处理这个响应。可以将对象的onreadystatechange属性设置为要使用的JavaScript的函数名,如下所示:

xmlhttp_request.onreadystatechange =FunctionName;

  FunctionName是用JavaScript创建的函数名,注意不要写成FunctionName(),当然我们也可以直接将JavaScript代码创建在onreadystatechange之后,例如:

xmlhttp_request.onreadystatechange = function(){

  // JavaScript代码段

  };

  在这个函数中。首先要检查请求的状态。只有当一个完整的服务器响应已经收到了,函数才可以处理该响应。XMLHttpRequest 提供了readyState属性来对服务器响应进行判断。

  readyState的取值如下:

    * 0 (未初始化)
    * 1 (正在装载)
    * 2 (装载完毕)
    * 3 (交互中)
    * 4 (完成)

  所以只有当readyState=4时,一个完整的服务器响应已经收到了,函数才可以处理该响应。具体代码如下:

  if (http_request.readyState == 4) { // 收到完整的服务器响应 } else { // 没有收到完整的服务器响应 }

当readyState=4时,一个完整的服务器响应已经收到了,接着,函数会检查HTTP服务器响应的状态值。完整的状态取值可参见W3C文档。当 HTTP服务器响应的值为200时,表示状态正常。

  在检查完请求的状态值和响应的HTTP状态值后,就可以处理从服务器得到的数据了。有两种方式可以得到这些数据:(1) 以文本字符串的方式返回服务器的响应

  (2) 以XMLDocument对象方式返回响应

  实例一: 用文本字符串的方式返回服务器的响应来验证网易通行证帐号是否存在

  首先,我们登陆网易通行证注册页面,可以看到检测用户名是否存在是将用户名提交给checkssn.jsp页面进行判断,格式为:

  reg.163.com/register/checkssn.jsp?username=用户名 根据上面讲到的方法,我们可以利用AJAX技术对网易通行证用户名进行检测:

  第一步:新建一个基于Xhtml标准的网页,在区域插入Javascript函数如下:

function getXMLRequester( )
{ var xmlhttp_request = false; try
{ if( window.ActiveXObject )
{ for( var i = 5; i; i-- ){ try{ if( i == 2 )
{ xmlhttp_request = new ActiveXObject( "Microsoft.XMLHTTP" ); }
else
{ xmlhttp_request = new ActiveXObject
( "Msxml2.XMLHTTP." + i + ".0" );
xmlhttp_request.setRequestHeader
("Content-Type","text/xml"); xmlhttp_request.setRequestHeader("Content-Type","gb2312"); }
break;}
catch(e){ xmlhttp_request = false; } } }
else if( window.XMLHttpRequest )
{ xmlhttp_request = new XMLHttpRequest();
if (xmlhttp_request.overrideMimeType)
{ xmlhttp_request.overrideMimeType('text/xml'); } } }
catch(e){ xmlhttp_request = false; }
return xmlhttp_request ; }
function IDRequest(n)
{//定义收到服务器的响应后需要执行的JavaScript函数 url=n+document.getElementByI('163id').value;
//定义网址参数 xmlhttp_request=getXMLRequester();
//调用创建XMLHttpRequest的函数 xmlhttp_request.onreadystatechange = doContents;
//调用doContents函数 xmlhttp_request.open('GET', url, true); xmlhttp_request.send(null); }function doContents()
{ if (xmlhttp_request.readyState == 4)
{// 收到完整的服务器响应 if (xmlhttp_request.status == 200) {
//HTTP服务器响应的值OK document.getElementById('message').innerHTML = xmlhttp_request.responseText;
//将服务器返回的字符串写到页面中ID为message的区域 }
else { alert(http_request.status); } } }

  在区域建立一个文本框,id为163id

  再建一个id为messsge的空白区域用来显示返回字符串(也可以通过Javascript函数截取一部分字符串显示):

  这样,一个基于AJAX技术的用户名检测页面就做好了,不过这个页面将返回服务器响应生成页面的所有字符串,当然还可以对返回的字符串进行一些操作,便于应用到不同的需要当中。

  实例二: 以XMLDocument对象方式返回响应来验证金山通行证帐号是否存在

  在上面的例子中,当服务器对HTTP请求的响应被收到后,我们会调用请求对象的reponseText属性。该属性包含了服务器返回响应文件的内容。现在我们以XMLDocument对象方式返回响应,此时将不再需要reponseText属性而使用 responseXML属性。

  首先登陆金山通行证注册页面,我们发现金山通行证用户名的检测方式为: pass.kingsoft.com/ksgweb/jsp/login/uid.jsp?uid=用户名,并且返回XML数据:

  isExistedUid -2

  当result值为-1时表示此用户名已被注册,当result值为-2时表示此用户名尚未注册,因此通过对result值的判断可以知道用户名是否被注册。

  对上例代码进行修改:

  首先找到

document.getElementById('message').innerHTML = xmlhttp_request.responseText;

  改为:

var response = xmlhttp_request.responseXML.documentElement;
var result = response.getElementsByTagName('result')[0].firstChild.data;//返回result节点数据
if(result ==-2){
document.getElementById('message').innerHTML = "用户名"+document.getElementById('163id').value+"尚未注册";}
else if(result ==-1){
document.getElementById('message').innerHTML = "对不起,用户名"+document.getElementById('163id').value+"已经注册";}

  通过以上两个实例说明了AJAX的客户端基础应用,采用的是网易和金山现成的服务器端程序,当然为了开发合适自己页面的程序,还需要对自己编写服务器端程序,这设计到程序语言及数据库的操作,对于有一定程序基础的读者一定不是很难的事情。

  演示地址:

  说明:我已经将制作好的文件上传到我的Blog,大家可以进行测试,由于Ajax和Xmlhttp不能跨域请求,所以测试时请调整IE的安全级别或者将xiacong.com暂时加入信任站点.

  网易通行证查询演示(AJAX): www.xiacong.com/test/163.htm

  金山通行证查询演示(AJAX): www.xiacong.com/test/j3.htm

2页,页码:[1] [2] 

上一篇:细说循序渐进学习Ajax的途径
下一篇:关于Ajax.Net的快速入门
Web2.0 中 Ajax 应用的详解 作者: 来源:xiacong
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐