您的位置:首页 > Web前端 > JavaScript

ASYNCHRONOUS JAVASCRIPT AND XML

2009-11-26 19:44 134 查看
JS层

// 定义一个全局
var xmlHttp;
// 返回一个xmlHttpRequest对象
function createXMLHttpRequest() {
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
} else {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
// 在动作触发点调用此方法,要传参
function searchBwd(dirid){
var id = dirid;
createXMLHttpRequest();
if (xmlHttp) {
// 设置url路径。执行JAVA层方法的路径。如带参,URL中的&参数为其页面相关FORM BEAN中的字段,如下面的“singledirid”。
var url = "addBWDVocAction.do?actionType=GetDirBwd&singledirid=" + id;
// 异步更新
xmlHttp.open("POST", url, true);
xmlHttp.onreadystatechange = callback;// 此方法在下面。
xmlHttp.send();
} else {
alert("Can not create the request,please check your browser!!");
}
}
function callback() {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
setBwdValue();// 此处开始执行在页面上画数据列表的方法
// 如类似于先存储,再查询展现新结果时,在此callback方法处再引入查询方法
} else {
window.location = "admin_addbwd.jsp";// 指定结果页面
}
}
}
// 页面上画数据列表
function setBwdValue() {
// 下面这定义三个变量,在其后的FOR循环里取值,来源是JAVA层(如STRUTS里的ACTION)输出的XML流,后面给出。
var bwdid;
var bwdName_zh;
var bwdName;

var xmlDoc = xmlHttp.responseXML;
var root = xmlDoc.getElementsByTagName("xml").item(0);
for (var i = 0; i < root.childNodes.length; i++) {
var child = root.childNodes[i].childNodes;
// 下面给以上三个自定义的变量赋值:
bwdid = child[0].firstChild.nodeValue;
bwdName_zh = child[1].firstChild.nodeValue;
bwdName = child[2].firstChild.nodeValue;
// 先判断三个变量里的值是否为空
if (bwdid != "" && bwdName_zh != "" && bwdName != "") {
//添加一行
var newTr = dirbwdTbl.insertRow();
//添加一列
var newTd0 = newTr.insertCell();
//设置列内容和属性
newTd0.innerHTML =
"<label style="/" mce_style="/""width: 10px/"></label>"
+ "<input type=/"radio/" id=/"chkId/" name=/"chkId/" onclick=/"getRadioValue()/" value=/"" + bwdid + "/" class=/"boxradio/" />"
+ "<label style="/" mce_style="/""width: 10px/"></label>"
+ "<input type=/"text/" id=/"dirbwdnamezh/" disabled size=65 value=/"" + bwdName_zh + "/" class=/"boxinput/" />"
+ "<label style="/" mce_style="/""width: 10px/"></label>"
+ "<input type=/"text/" id=/"dirbwdname/" disabled size=65 value=/"" + bwdName + "/" class=/"boxinput/" />";//注意此处结束时的分号
}
}
}


JAVA层

// 此方法中查询方法为SSH中一种方式,具体查询数据方法视具体环境而定。
public ActionForward doGetDirBwd(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
AdminAddBWDVocForm aavf = (AdminAddBWDVocForm) form;
BWdBO bwdbo = new BWdBO();
bwdbo.setDirid(aavf.getSingledirid());
//	System.out.println("/ndirid= " + aavf.getSingledirid());
VOPackage vo = new VOPackage();
// 根据目录ID查询词汇
vo.setActionType(Constant.QUERY_BWD);
vo.setData(bwdbo);
List bwdLst = new ArrayList();
try {
bwdLst = (List) this.getProcessor().process(vo);
// 开始将查询出的数据组织成XML流
ServletOutputStream out = response.getOutputStream();
response.setContentType("text/xml;charset=UTF-8");// 添加XML中文字符支持
StringBuffer xml = new StringBuffer();
xml.append("<?xml version=/"1.0/" encoding=/"UTF-8/"?>");// 添加XML中文字符支持
xml.append("<xml>");
for (int i = 0; i < bwdLst.size(); ++i) {
BWdBO bo = (BWdBO) bwdLst.get(i);
// XML节点名
xml.append("<dirbwd>");
// 三个XML子元素,依次为0、1、2。诸如此类。
xml.append("<bwdid>" + bo.getId() + "</bwdid>");
xml.append("<bwdName_zh>" + bo.getBwdName_zh() + "</bwdName_zh>");
xml.append("<bwdName>" + bo.getBwdName() + "</bwdName>");
xml.append("</dirbwd>");
}
xml.append("</xml>");
// 输出XML流(JS可以取得)
out.print(xml.toString());
//		System.out.println("/nout.toString: " + out.toString());
//		System.out.println("/nxml.toString: " + xml.toString());
out.close();
} catch (Exception e) {
System.out.println("获取DIRBWD时异常:" + e.getStackTrace());
}
return null;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: