对于这个应用程序来说,"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"); |
三、 实际问题
在AJAX中,如果网络或远程服务器出现中断,会发生什么呢?实际上,存在两个主要问题;默认地,它们并没有在XMLHttpRequest对象中得到解决。这两个主要问题是:
1.处理延迟:如果网络或远程服务器耗费较多时间,那么这个问题如何与你的AJAX应用程序相联系呢?
2.响应顺序:潜在地,网络(或服务器)会不断变化。这意味着,响应可能不会以与请求相同的顺序返回。
为了处理上面这两个问题,程序员必须编写代码来解决这个问题。对于第一个问题,一种可能的方案如下所示:
function callInProgress(xmlhttp) { switch ( xmlhttp.readyState ) { case 1,2,3: 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"); } |
上一页 [1] [2] [3] [4] 下一页