//调用AJAX
if (window.XMLHttpRequest) {
// 非IE浏览器
req = new XMLHttpRequest();
req.onreadystatechange = processStateChange;
try {
req.open("GET", url, true);
} catch (e) {
alert("Server Communication Problem\n" e);
}
req.send(null);
} else if (window.ActiveXObject) {
// IE
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
req.onreadystatechange=processStateChange;
req.open("GET", url, true);
req.send();
}
}
}
getFormAsString() 是一个“私有” 方法,在retrieveURL()中使用。
function getFormAsString(formName){
//设置返回字符串
returnString ="";
//取得表单的值
formElements=document.forms[formName].elements;
//循环数组,组装url
//像'/strutsaction.do&name=value'这样的格式
for(var i=formElements.length-1;i>=0; --i ){
//转化每一个值
returnString ="&"
escape(formElements[i].name) "="
escape(formElements[i].value);
}
//返回字符串
return returnString;
}
根据AJAX的响应更新web页面
到现在为止,我们学习过了使用JavaScript来完成AJAX调用(前面列出),Struts Action,ActionForm以及JSP(基本没有变化,只是增加了标签)。为了完善我们对Struts-AJAX项目的了解,我们需要了解三个用于根据服务器返回的结果而更新页面的JavaScript方法。
· processStateChange(): 该方法在AJAX调用前设定。它在服务器响应到达后由XMLHttpRequest/Microsoft.XMLHTTP 对象调用。
·splitTextIntoSpan(): 根据响应,循环取出数组中的元素组装成NewContent。
·replaceExistingWithNewHtml(): 根据span元素数组,循环搜索,将里面的元素调换掉页面中和它的'someName'相同的中的内容。注意,我们使用的是req.responseText 方法来获得返回的内容(它允许我们操作任何文本的响应)。与此相对于的是req.responseXml (它的作用更大,但是要求服务器返回是XHTML或者XML)。
function processStateChange() {
if (req.readyState == 4) { // 完成
if (req.status == 200) { // 响应正常
//将响应的文本分割成Span元素
spanElements =
splitTextIntoSpan(req.responseText);
//使用这些Span元素更新页面
replaceExistingWithNewHtml(spanElements);
} else {
alert("Problem with server response:\n "
req.statusText);
}
}
}
replaceExistingWithNewHtml() 是为processStateChange()使用的“私有”方法。
function replaceExistingWithNewHtml
(newTextElements){
//循环newTextElements
for(var i=newTextElements.length-1;i>=0;--i){
//判断是否以 if(newTextElements[i].
indexOf("-1){
//获得span的名字- 设置在第一和第二个引号之间
//确认span元素是以下的格式
//NewContent
startNamePos=newTextElements[i].
indexOf('"') 1;
endNamePos=newTextElements[i].
indexOf('"',startNamePos);
name=newTextElements[i].
substring(startNamePos,endNamePos);
//获得内容-在第一个>标记后的所有内容
startContentPos=newTextElements[i].
indexOf('>') 1;
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



