function searchProjectByName() ... {
var f=document.forms[0];
var pName=document.getElementById("projectName").value;
if(isEmpty(pName))...{
alert("请输入项目名!");
return;
}
pName=paramEscape(pName);
var url="searchProjectByName?depId="+f.depId.value+"&projectName="+pName+"&ioc="+f.op.value+"&timeStamp="+new Date().getTime();
xmlHttp.open('get',url,true);
// 显示遮盖层
document.body.appendChild(outHiddenDiv);
document.body.appendChild(innerHiddenDiv);
xmlHttp.onReadyStateChange=handStateSearchProjectByName;
xmlHttp.send(null);
}
function handStateSearchProjectByName() ... {
if(xmlHttp.readyState==4)...{
if (xmlHttp.status == 200) ...{
var f=document.forms[0];
var text=xmlHttp.responseText;
//alert(text);
if(text=='no')...{
//移除遮盖层
document.body.removeChild(outHiddenDiv);
document.body.removeChild(innerHiddenDiv);
alert('没有找到您要的项目!');
showSearchText();
return false;
}else...{
var str=text.split(',');
var totalText=document.createTextNode(str[0]+"("+str[2]+")");
var totalTd=document.getElementById("total");
totalTd.removeChild(totalTd.firstChild);
totalTd.appendChild(totalText);
f.totalCash.value=str[0];
f.budgetCash.value=str[1];
var budCash=document.getElementById("budCash");
var budCashText=document.createTextNode(str[1]);
budCash.removeChild(budCash.firstChild);
budCash.appendChild(budCashText);
var obj=document.getElementById("divName");
var othDiv=document.getElementById("othName");
changeDisplay(obj);
changeDisplay(othDiv);
f.projectId.value=str[3];
f.money.value="";
}
//移除遮盖层
document.body.removeChild(outHiddenDiv);
document.body.removeChild(innerHiddenDiv);
}
}
}
// 供选择项目时更新累计发生额,预算金额的方法
function updateCashText(obj) ... {
// 显示遮盖层
document.body.appendChild(outHiddenDiv);
document.body.appendChild(innerHiddenDiv);
var proId=obj.value;
var url="updateCashText?projectId="+proId+"&timeStamp="+new Date().getTime();
xmlHttp.open("get",url,true);
xmlHttp.onReadyStateChange=handCashTextState;
xmlHttp.send(null);
}
function handCashTextState() ... {
if(xmlHttp.readyState==4)...{
if(xmlHttp.status==200)...{
var f=document.forms[0];
var text=xmlHttp.responseText;
var str=text.split('!');
var totalText=document.createTextNode(str[0]+"("+str[2]+")");
var totalTd=document.getElementById("total");
totalTd.removeChild(totalTd.firstChild);
totalTd.appendChild(totalText);
var budCash=document.getElementById("budCash");
var budCashText=document.createTextNode(str[1]);
budCash.removeChild(budCash.firstChild);
budCash.appendChild(budCashText);
f.totalCash.value=str[0];
f.budgetCash.value=str[1];
f.money.value="";
f.billNumber.value = str[3];
//alert(f.totalCash.value);
//alert(f.budgetCash.value);
//移除遮盖层
document.body.removeChild(outHiddenDiv);
document.body.removeChild(innerHiddenDiv);
}
}
}
function changeCash() ... {
var f=document.forms[0];
var money=f.money.value;
if(isNaN(money))...{
alert('收款金额应该为数字类型');
f.money.focus;
return false;
}else...{
var totalCash=f.totalCash.value;
var bugetCash=f.budgetCash.value;
var changeCash="";
if(!isEmpty(money))...{
changeCash=parseFloat(money);
}
if(!isEmpty(totalCash))...{
changeCash+=parseFloat(totalCash);
}
var bit=0;
if(changeCash!=0&&bugetCash!=0)...{
bit=changeCash/bugetCash*10000;
bit=Math.round(bit);
}
var totalText=document.createTextNode(changeCash+"("+bit/100+"%)");
var totalTd=document.getElementById("total");
totalTd.removeChild(totalTd.firstChild);
totalTd.appendChild(totalText);
}
}
if(xmlHttp.readyState==4)...{
if(xmlHttp.status==200)...{
var f=document.forms[0];
var xml=xmlHttp.responseXml;
var items=xml.getElementsByTagName('item');
var length=f.depId.options.length;
for(var i=0;i<length;i++)...{
f.depId.options.remove(0);
}
for(var i=0;i<items.length;i++)...{
var item = items[i];
var id = item.getAttribute("id");
var text = item.getAttribute("text");
f.depId.options.add(new Option(text,id));
}
//移除遮盖层
document.body.removeChild(outHiddenDiv);
document.body.removeChild(innerHiddenDiv);
}
}
}
var xmlHttp;
function createXMLHttpRequest(){
if(window.ActiveXObject){
xmlHttp=new ActiveXObject("microsoft.XMLHTTP");
}else if(window.XMLHttpRequest){
xmlHttp=new XMLHttpRequest();
}
}
xmlHttp.open("POST|GET|PUT",URL,"TRUE|FLASE",USERNAME,PASSWORD);
xmlHttp.onreadyStatechange=callback;
xmlHttp.send(params);
void setRequestHeader(string header, string value)
string getAllResponseHeaders():它返回一个串,其中包含HTTP请求的所有响应首部,首部包括Content-Length、Date和URI。
string getResponseHeader(string header):有一个参数表示你希望得到的指定首部值,并且把这个值作为串返回。
表2-2 标准XMLHttpRequest属性
属 性 描 述
onreadystatechange 每个状态改变时都会触发这个事件处理器,通常会调用一个JavaScript函数
readyState 请求的状态。有5个可取值:0 = 未初始化,1 = 正在加载,2 = 已加载,3 = 交互中,4 = 完成
responseText 服务器的响应,表示为一个串
responseXML 服务器的响应,表示为XML。这个对象可以解析为一个DOM对象
status 服务器的HTTP状态码(200对应OK,404对应Not Found(未找到),等等)
statusText HTTP状态码的相应文本(OK或Not Found(未找到)等等)
if(xmlHttp.readyState==4){
var active=new ActiveXObject("Microsoft.XMLDOM");
var response=xmlHttp.responseText;
active.async = false;
active.load(response);
}
------------------------------------------------------------------------------
表3-1 用于处理XML文档的DOM元素属性
属性名 描述
childNodes 返回当前元素所有子元素的数组
firstChild 返回当前元素的第一个下级子元素
lastChild 返回当前元素的最后一个子元素
nextSibling 返回紧跟在当前元素后面的元素
nodeValue 指定表示元素值的读/写属性
parentNode 返回元素的父节点
previousSibling 返回紧邻当前元素之前的元素
-----------------------------------------------------------------------
表3-2 用于遍历XML文档的DOM元素方法
方法 描述
getElementById(id) (document) 获取有指定惟一ID属性值文档中的元素
getElementsByTagName(name) 返回当前元素中有指定标记名的子元素的数组
hasChildNodes() 返回一个布尔值,指示元素是否有子元素
getAttribute(name) 返回元素的属性值,属性由name指定
-----------------------------------------------------------------------------
表3-3 动态创建内容时所用的W3C DOM属性和方法
属性/方法
描述
document.createElement(tagName)
文档对象上的createElement方法可以创建由tagName指定的元素。如果以串div作为方法参数,就会生成一个div元素
document.createTextNode(text)
文档对象的createTextNode方法会创建一个包含静态文本的节点
<element>.appendChild(childNode)
appendChild方法将指定的节点增加到当前元素的子节点列表(作为一个新的子节点)。例如,可以增加一个option元素,作为select元素的子节点
<element>.getAttribute(name)
<element>.setAttribute(name, value)
这些方法分别获得和设置元素中name属性的值
<element>.insertBefore(newNode, targetNode)
这个方法将节点newNode作为当前元素的子节点插到targetNode元素前面
<element>.removeAttribute(name)
这个方法从元素中删除属性name
<element>.removeChild(childNode)
这个方法从元素中删除子元素childNode
<element>.replaceChild(newNode, oldNode)
这个方法将节点oldNode替换为节点newNode
<element>.hasChildnodes()
这个方法返回一个布尔值,指示元素是否有子元素
少数其他几种方法是专门用于文本节点的。这些方法用于增加或分解节点中的数据:
appendData(text) 将提供的文本追加到文本节点的已有内容之后。
insertData(position, text) 允许在文本节点的中间插入数据。在指定的位置插入提供的文本。
replaceData(position, length, text) 从指定位置开始删除指定长度的字符,用提供的文本代替删除的文本。
----------------------------------------------------------------------------------------------------------
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");