技术开发 频道

使用AJAX技术构建更优秀的Web应用程序

    (三) 属性
属性 描述
onreadystatechange 每当状态改变时激发的事件的事件处理器。其中,readyState对象状态整数含义如下:0=uninitialized1=loading2=loaded3=interactive4=complete
responseText 经服务器处理后返回的数据的字符串版本
responseXML 经服务器处理后返回的DOM兼容的数据文档对象
status 由服务器返回的数字代码,例如404代表"Not Found",200代表"OK"
statusText 伴随着状态代码的字符串信息

    在此,应用程序中使用了onreadystatechange:
//这是事件处理器机制;在本例中,"RequestProcessor"即是事件处理器。 req.onreadystatechange=RequestProcessor;

    对于这个应用程序来说,"RequestProcessor"是客户端的事件处理器。现在,在事件处理器内,使用readyState属性来获得各种状态。值4显示已经完成某种处理。现在,在处理结果前,你应该检查状态或statusText以决定操作成功与否。在这个应用程序中,我是以下面方式实现的:

function RequestProcessor() {  //如果readyState处理"Ready"状态  if(req.readyState == 4)  {   //返回的状态代码200意味着一切顺利   if(req.status == 200)   {    //如果responseText不空    //req.responseText实际上是一个由AJAXServer.aspx的"Response.Write("" + sbXML.ToString() + "");"方法编写的字符串    if(req.responseText != "")    {     populateList(req.responseXML);    }    else    {     clearSelect(publishedBooks);    }   }  }  return true; }

    注意 对象req被声明为一个页面级的变量:

var req = new ActiveXObject("Microsoft.XMLHTTP");

    警告:请求目的的url必须与客户端脚本处于同一个域中。原因是,XMLHttpRequest对象采用与客户端脚本一致的封装技术。在大多数支持这种功能的浏览器上,拥有存取XMLHttpRequest对象的脚本的页面都需要使用http:协议检索。这意味着,你无法在一个本地硬盘上(file:协议)进行页面测试。

    三、 实际问题

    在AJAX中,如果网络或远程服务器出现中断,会发生什么呢?实际上,存在两个主要问题;默认地,它们并没有在XMLHttpRequest对象中得到解决。这两个主要问题是:

    1.处理延迟:如果网络或远程服务器耗费较多时间,那么这个问题如何与你的AJAX应用程序相联系呢?
    2.响应顺序:潜在地,网络(或服务器)会不断变化。这意味着,响应可能不会以与请求相同的顺序返回。

    为了处理上面这两个问题,程序员必须编写代码来解决这个问题。对于第一个问题,一种可能的方案如下所示:

function callInProgress(xmlhttp) {  switch ( xmlhttp.readyState ) {   case 123:    return true;    break;    //Case 4和0   default:    return false;    break;  } }

    现在,在调用send()前,我可以先检查一下是否该对象正处于忙态:

if ( !callInProgress(xmlhttp) ) {  xmlhttp.send(null); } else {  alert("I'm busy. Wait a moment"); }

    (一) 支持Ajax技术的浏览器 

    微软Internet Explorer版本5.0及以上版本,和基于它的浏览器(Mac OS版本不支持) 
    基于Gecko的浏览器,如Mozilla,Mozilla Firefox,SeaMonkey,Epiphany,Galeon和Netscape版本7.1及以上版本 
    实现KHTML API版本3.2及以上版本的浏览器,包括Konqueror版本3.2及以上版本,还有Apple Safari版本1.2及以上版本 
    Opera浏览器版本8.0及以上版本,包括Opera Mobile浏览器版本8.0及以上版本

    (二) 不支持Ajax技术的浏览器 

    Opera 7及以下版本 
    微软Internet Explorer 4.0及以下版本 
    基于文本的浏览器,如Lynx和Links 
    没有可视化实现的浏览器
    1997年以前的浏览器

    (三) 本文示例应用程序特定需求

   软件要求:

    1.ASP.Net 2.0;
    2.MS SQL Server 2000,并要求相应的pubs数据库设置;
    3.改变web.config文件中的DB连接字符串("CONN_STRING"键)。

<APPSETTINGS> <ADD value="data source=cal-slcu2-196;Database=pubs;User=sa;PWD=sa" key="CONN_STRING" /> </APPSETTINGS>

    变量或类名应该象上面这样被包括到<code>标记中。

    四、 总结

    本文概括性地归纳了基于AJAX技术构建下一代流行Web应用程序的主要技术及有关概念,并给出一个完整示例程序的关键片断的分析。

0
相关文章