function retrieveURL(url,nameOfFormToPost) {
//将url转换成字符串
url=url+getFormAsString(nameOfFormToPost);
//调用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() {