毛毛的小窝 — 关注技术交流、让我们一起成长

导航

Ajax学习(二)

XMLHTTP对象及其方法
------------------
MSXML中提供了Microsoft.XMLHTTP对象,能够完成从数据包到Request对象的转换以及发送任务。 
创建XMLHTTP对象的语句如下: 
Set objXML = CreateObject("Msxml2.XMLHTTP") 或
Set objXML = CreateObject(“Microsoft.XMLHTTP”)
' Or, for version 3.0 of XMLHTTP, use:
' Set xml = Server.CreateObject("MSXML2.ServerXMLHTTP")
对象创建后调用Open方法对Request对象进行初始化,语法格式为: 
poster.open http-method, url, async, userID, password 
Open方法中包含了5个参数,前三个是必要的,后两个是可选的(在服务器需要进行身份验证时提供)。参数的含义如下所示:  
http-method: HTTP的通信方式,比如GET或是 POST 
url: 接收XML数据的服务器的URL地址。通常在URL中要指明 ASP或CGI程序 
async: 一个布尔标识,说明请求是否为异步的。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作 
userID 用户ID,用于服务器身份验证 
password 用户密码,用于服务器身份验证 
XMLHTTP对象的Send方法 
用Open方法对Request对象进行初始化后,调用Send方法发送XML数据: 
poster.send XML-data 
Send方法的参数类型是Variant,可以是字符串、DOM树或任意数据流。发送数据的方式分为同步和异步两种。在异步方式下,数据包一旦发送完毕,就结束Send进程,客户机执行其他的操作;而在同步方式下,客户机要等到服务器返回确认消息后才结束Send进程。 
XMLHTTP对象中的readyState属性能够反映出服务器在处理请求时的进展状况。客户机的程序可以根据这个状态信息设置相应的事件处理方法。属性值及其含义如下表所示: 
值 说明 
0 Response对象已经创建,但XML文档上载过程尚未结束 
1 XML文档已经装载完毕 
2 XML文档已经装载完毕,正在处理中 
3 部分XML文档已经解析 
4 文档已经解析完毕,客户端可以接受返回消息
客户机处理响应信息 
客户机接收到返回消息后,进行简单的处理,基本上就完成了C/S之间的一个交互周期。客户机接收响应是通过XMLHTTP对象的属性实现的: 
● responseTxt:将返回消息作为文本字符串; 
● responseXML:将返回消息视为XML文档,在服务器响应消息中含有XML数据时使用; 
● responseStream:将返回消息视为Stream对象。
 

下面的xml文件是动态生成的最后用xmlHTTP传送出去,这是一个在客户端JavaScript脚本里的内容,当然你也可以写在服务器,但是要相应的改一些东西:(仅供大家参考,了解它的用法)
var xmlDoc=new ActiveXObject("MSXML2.DOMDocument");
flag=xmlDoc.loadXML("");

  newNode =xmlDoc.createElement("编码")
  MarkNode=xmlDoc.documentElement.appendChild(newNode);
  newNode =xmlDoc.createElement("StartMark")
  newNode.text=StartMark;
  MarkNode.appendChild(newNode)
  newNode =xmlDoc.createElement("EndMark")
  newNode.text=EndMark;
  MarkNode.appendChild(newNode)
  
  newNode =xmlDoc.createElement("日期")
  DateNode=xmlDoc.documentElement.appendChild(newNode);
  newNode =xmlDoc.createElement("StartDate");
  newNode.text=StartDate;
  DateNode.appendChild(newNode)
  newNode =xmlDoc.createElement("EndDate")
  newNode.text=EndDate;
  DateNode.appendChild(newNode);
  
  newNode =xmlDoc.createElement("数量")
  SLNode =xmlDoc.documentElement.appendChild(newNode);
  newNode =xmlDoc.createElement("StartSL")
  newNode.text=StartShuL 
  SLNode.appendChild(newNode)
  newNode =xmlDoc.createElement("EndSL");
  newNode.text=EndShuL
  SLNode.appendChild(newNode);
  
  newNode =xmlDoc.createElement("单价")
  DJNode =xmlDoc.documentElement.appendChild(newNode)
  newNode =xmlDoc.createElement("StartDJ")
  newNode.text=StartDanJ;
  DJNode.appendChild(newNode);
  newNode =xmlDoc.createElement("EndDJ")
  newNode.text=EndDanJ;
  DJNode.appendChild(newNode);
  
  newNode =xmlDoc.createElement("金额")
  JENode =xmlDoc.documentElement.appendChild(newNode)
  newNode =xmlDoc.createElement("StartJE")
  newNode.text=StartJinE
  JENode.appendChild(newNode)
  newNode =xmlDoc.createElement("EndJE")
  newNode.text=EndJinE
  JENode.appendChild(newNode)
  
  newNode =xmlDoc.createElement("仓库代码")
  newNode.text=CK;
  xmlDoc.documentElement.appendChild(newNode)
  
  newNode =xmlDoc.createElement("票号")
  newNode.text=RKPH;
  xmlDoc.documentElement.appendChild(newNode)
  
  newNode =xmlDoc.createElement("单位代码")
  newNode.text=CorpName;
  xmlDoc.documentElement.appendChild(newNode)
  
  newNode =xmlDoc.createElement("BiaoShi")
  newNode.text=Biaoshi
  xmlDoc.documentElement.appendChild(newNode)
  
  newNode =xmlDoc.createElement("FindCate")
  newNode.text=FindCate
  xmlDoc.documentElement.appendChild(newNode)
  
  var xh =new ActiveXObject("MSXML2.XMLHTTP")
  xh.open("POST","Find.asp",false)
  xh.setRequestHeader("Content-Type","text/xml")
  xh.setRequestHeader("Content-Type","gb2312")
  xh.send(xmlDoc);
我的每一个newNode的text值是一个变量,也就是我客户端form 中input的值,
1、客户端用xmlHTTP 向服务器页面发送请求
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open(
"GET","Default2.aspx",false,"","");
xmlhttp.send();

2、服务器页面后台用C#中DataSet实现数据库的操作 并得到结果
//连接数据库
SqlConnection myConn = new SqlConnection("Data Source=192.168.0.36;Initial Catalog=Northwind;User ID=sa;Password=sa");
SqlDataAdapter myda 
= new SqlDataAdapter("select top 5 * from orders", myConn);
DataSet myds 
= new DataSet();
myConn.Open();
myda.Fill(myds);
myConn.Close();
  
// 把xml对象发送给客户端
Response.ContentType = "text/xml";
Response.Write(myds.GetXml());
Response.End();

3、客户端用xmlDOC 得到xmlHTTP返回的结果 并对结果进行操作
// 从服务器得到处理后的xml对象
var xmldom = new ActiveXObject("Microsoft.XMLDOM");
xmlhttp.responseXML.createProcessingInstruction(
"xml"," version=\"1.0\" encoding=\"gb2312\"");
xmldom 
= xmlhttp.responseXML.documentElement;
//alert(xmldom.xml);
      
// 通过xmldom操作结果
var length = xmldom.getElementsByTagName("OrderID").length;
alert(length);

 

 

<result> 
  
<incgateway> 
    
<id>55746698</id> 
    
<callingnumber>63814890</callingnumber> 
    
<callednumber>63814839</callednumber> 
  
</incgateway> 
  
<incgateway> 
    
<id>55746698</id> 
    
<callingnumber>63814891</callingnumber> 
    
<callednumber>63814839</callednumber> 
  
</incgateway> 
</result>

 

var responseXML = xmlHttp.responseXML ; 
var results = responseXML.getElementsByTagName("incgateway") ; 
for (var i= 0 ;i < results.length ; i++)
  
var row = document.createElement("tr") ; 
  
var callingnumber = "" ; 
  
if (responseXML.getElementsByTagName  ("callingnumber")[i].firstChild != null
    callingnumber 
=     xmlHttp.responseXML.getElementsByTagName    ("callingnumber")[i].firstChild.nodeValue ; 
  }
 
  
var callednumber = "" ; 
  
if (responseXML.getElementsByTagName    ("callednumber")[i].firstChild != null
  callednumber 
= responseXML.getElementsByTagName("callednumber")[i].firstChild.nodeValue ; 
}
 
  row.appendChild(createCellWithText  (callednumber)); 
  document.getElementById  (
"incGateway").appendChild(row) ;

}


-----------------------------------------------------------------------------------------------------------------------------

 

========
XMLHTTP
========
Open方法
   包含了5个参数,前三个是必要的,
   后两个是可选的(在服务器需要进行身份验证时提供)。
   参数的含义如下所示: 
   http-method: HTTP的通信方式,比如GET或是 POST 
   url: 接收XML数据的服务器的URL地址。通常在URL中要指明 ASP或CGI程序 
   async: 一个布尔标识,说明请求是否为异步的。
          如果是异步通信方式(true),客户机就不等待服务器的响应;
          如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作 
   userID 用户ID,用于服务器身份验证 
   password 用户密码,用于服务器身份验证

用Open方法对Request对象进行初始化后,调用Send方法发送XML数据

Send方法
    参数类型是Variant,可以是字符串、DOM树或任意数据流。
    发送数据的方式分为同步和异步两种。
    在异步方式下,数据包一旦发送完毕,就结束Send进程,客户机执行其他的操作;
    而在同步方式下,客户机要等到服务器返回确认消息后才结束Send进程。

XMLHTTP对象中的readyState属性
    能够反映出服务器在处理请求时的进展状况。
    客户机的程序可以根据这个状态信息设置相应的事件处理方法。
    值 说明
    0   Response对象已经创建,但XML文档上载过程尚未结束 
    1   XML文档已经装载完毕 
    2   XML文档已经装载完毕,正在处理中 
    3   部分XML文档已经解析 
    4   文档已经解析完毕,客户端可以接受返回消息

客户机接收响应是通过XMLHTTP对象的属性实现
    responseText:将返回消息作为文本字符串; 
    responseBody:将返回消息作为HTML文档内容;
    responseXML:将返回消息视为XML文档,在服务器响应消息中含有XML数据时使用; 
    responseStream:将返回消息视为Stream对象 

=======
XMLDOC
=======
Document 对象属性
以下所列是可用的document对象属性: 
1. async 
2. attributes 
3. childNodes 
4. doctype 
5. document.lement 
6. firstChild 
7. implementation 
8. lastChild 
9. nextSibling 
10. nodeName 
11. nodeType 
12. nodevalue 
13. ondataavailable 
14. onreadystatechange 
15. ownerdocument.
16. parentNode 
17. parseError 
18. previousSibling 
19. readyState 
20. url 
21. validateOnParse 
22. xml 

以下列出关于document对象可用的方法。 
1. abort 
2. appendChild 
3. cloneNode 
4. createAttribute 
5. createCDATASection 
6. createComment 
7. createdocument.ragment 
8. createElement 
9. createEntityReference 
10. createNode 
11. createProcessingInstruction 
12. createTextNode 
13. getElementsByTagName 
14. hasChildNodes 
15. insertBefore 
16. load 
17. loadXML 
18. nodeFromID 
19. parsed 
20. removeChild 
21. replaceChild 
22. selectNodes 
23. selectSingleNode 
24. transformNode 

下面列出来的是document对象可用的事件: 
1. Ondataavailable 
2. Onreadystatechange

Document 对象属性
以下所列是可用的document对象属性: 
1. async 
2. attributes 
3. childNodes 
4. doctype 
5. document.lement 
6. firstChild 
7. implementation 
8. lastChild 
9. nextSibling 
10. nodeName 
11. nodeType 
12. nodevalue 
13. ondataavailable 
14. onreadystatechange 
15. ownerdocument.
16. parentNode 
17. parseError 
18. previousSibling 
19. readyState 
20. url 
21. validateOnParse 
22. xml 


async 属性 
------------------ 
async 属性表示是否允许异步的下载。

基本语法: 
boolvalue = XMLdocument.async;
XMLdocument.async = boolvalue; 
说明:布尔值是可擦写的(read/write),如果准许异步下载,值为True;反之则为False。
使用范例: 
xmlDoc.async = "false"; 
alert(xmlDoc.async); 

attribute 属性 
------------------- 
传回目前节点的属性列表。 

基本语法: 
objAttributeList = xmlNode.attributes; 
说明:传回一个物件。如果此节点不能包含属性,则传回空值。 
使用范例: 
objAttList = xmlDoc.document.lement.attributes; 
alert(objAttList); 
------------------------------------------------------------------------------ 
[Note] 
例子以[object]为结果传回。
这是由于被传回的对象,若不使用其它的对象属性,就不能以文字来表示,
在本附录中包含数个这样的例子。尽管很多对象属性本身似乎不是很有用,
但您将会在附录中看到如何组合属性和方法得到您要的结果。 
------------------------------------------------------------------------------ 


childNodes 属性 
----------------- 
传回一个节点清单,包含该节点所有可用的子节点。 

基本语法: 
objNodeList=node.childNodes; 
说明:传回一个物件。假如这节点没有子节点,传回null。
使用范例: 
objNodeList = xmlDoc.childNodes; 
alert(objNodeList); 


doctype 属性 
----------------- 
传回文件型态节点,包含目前文件的DTD。
这节点是一般的文件型态宣告,
例如,节点
<!DOCTYPE EMAIL SYSTEM "LstA_2.dtd">
名为EMAIL 的节点物件会被传回。 

基本语法: 
objDocType=xmldocument.doctype; 
说明:传回一个对象,这个属性是只读的。假如这文件不包含DTD,会传回null。
使用范例: 
objDocType = xmlDoc.doctype; 
alert(objDocType.nodeName); 
document.lement 属性 


确认XML 文件的根(Root)节点。 
---------------------------- 
基本语法: 
objDoc=xmldocumentdocument.element; 
说明:回一个在单一根文件元素中包含数据的对象。
此属性可读/写,如果文件中不包含根节点,将传回null。 


使用范例: 
objDocRoot = xmlDoc.document.element; 
alert(objDocRoot); 


firstChild 属性 
----------------- 
确认在目前节点中的第一个子元素。 

基本语法: 
objFirstChild = xmlDocNode.firstChild; 
说明:此属性只读且会传回一对象,如果节点中没有包含第一个子元素,将传回null。
使用范例: 
objFirstChild = xmlDoc.document.lement.firstChild; 
alert(objFirstChild); 


implementation 属性 
--------------------- 
DOM 应用程序能使用其它实作中的对象。
implementation 属性确认目前XML 文件的DOMimplementation 对象

基本语法: 
objImplementation = xmldocument.implementation; 
说明:此属性只读且传回一个对象。
使用范例: 
objImp = xmlDoc.implementation; 
alert(objImp); 

lastChild 属性 
--------------- 
确认目前节点中最后的子元素。

基本语法: 
objLastChild = xmlDocNode.lastChild; 
说明:此属性只读且传回一个对象。如果节点中没有包含最后子元素,将传回null。
使用范例: 
objLastChild = xmlDoc.document.lement.lastChild; 
alert(objLastChild); 

nextSibling 属性 
------------------ 
在目前文件节点的子节点列表中传回下一个兄弟节点。

基本语法: 
objNextSibling = xmlDocNode.nextSibling; 
说明:此属性是只读且传回一个对象。如果节点中没有包含其它的相关节点,会传回null。
使用范例: 
objSibling = xmlDoc.document.lement.childNodes.item(1).nextSibling; 
alert(objSibling); 

nodeName 属性 
--------------- 
传回代表目前节点名称的字符串。

基本语法: 
strNodeName = xmlDocNode.nodeName ; 
说明:传回一个字符串。这个属性是只读的,传回元素名称、属性或实体参照。
使用范例: 
strNodeName = xmlDoc.document.lement.nodeName; 
alert(strNodeName); 

nodeType 属性 
--------------- 
辨识节点的DOM 型态。

基本语法: 
numNodeType = xmlDocNode.nodeType; 
说明:此属性只读且传回一个数值。 

有效的数值符合以下的型别: 
1-ELEMENT 
2-ATTRIBUTE 
3-TEXT 
4-CDATA 
5-ENTITY REFERENCE 
6-ENTITY 
7-PI (processing instruction) 
8-COMMENT 
9-document.
10-document.nbsp;TYPE 
11-document.nbsp;FRAGMENT 
12-NOTATION 
-------------------------------
使用范例: 
numNodeType = xmlDoc.document.lement.nodeType; 
alert(numNodeType); 

nodevalue 属性 
----------------- 
传回指定节点相关的文字。
这并非一个元素中数据的值,而是与一个节点相关且未解析的文字,
就像一个属性或者一个处理指令。 

基本语法: 
varNodevalue = xmlDocNode.nodevalue; 
说明:传回的文字代表以节点的nodeType 属性为主的型态值。
(请参考附录中的nodeType 属性。)
因为节点型态可能是几种数据型态中的一种,传回值也因此有差异。
传回null 的节点型态有:
document.ELEMENT、document.TYPE、document.FRAGMENT、
ENTITY、ENTITY REFERENCE,和NOTATION。
此属性可擦写。 
使用范例: 
varNodevalue = xmlDoc.document.lement.nodevalue; 
alert(varNodevalue); 

ondataavailable 属性 
--------------------- 
指定一个事件来处理ondataavailable 事件。
(更多关于ondataavailable 事件的信息,
请参阅附录中<document对象事件>的部分)。

基本语法: 
xmlDocNode.ondataavailable = value; 
说明:此属性是唯写,允许文件作者一旦数据为可用,即可尽快的使用数据来运作。 
使用范例: 
xmlDoc.ondataavailable = alert("Data is now available."); 


onreadystatechange 属性 
------------------------ 
指定一个事件来处理onreadystatechange 事件。
这个事件能辨识readyState 属性的改变。 

基本语法: 
xmlDocNode.onreadystatechange = value; 
说明:此属性是唯写的,允许文件作者指定当readyState 属性改变时呼叫事件。 
使用范例: 
xmlDoc.onreadystatechange = 
alert("The readyState property has changed."); 


ownerdocument属性 
------------------------ 
传回文件的根节点,包含目前节点。 


基本语法: 
objOwnerDoc = xmldocument.ownerdocument. 
说明:此属性是只读的,传回一个包含文件根节点的对象,包含特定的节点。
使用范例: 
objOwnerDoc = xmlDoc.childNodes.item(2).ownerdocument. 
alert(objOwnerDoc); 


parentNode 属性 
----------------- 
传回目前节点的父节点。只能应用在有父节点的节点中。
 
基本语法: 
objParentNode = xmldocument.ode.parentNode; 
说明:此属性是只读的,传回包含指定节点的父节点对象。
如果此节点不存在于文件树中,将传回null。 
使用范例: 
objParentNode = xmlDoc.childNodes.item(1).parentNode; 
alert(objParentNode); 


parseError 属性 
----------------- 
传回一个DOM 解析错误对象,此对象描述最后解析错误的讯息。 

基本语法: 
objParseErr = xmldocument.parseError; 
说明:此属性是只读的。如果没有错误发生,将传回0。 
使用范例: 
objParseErr = xmlDoc.parseError; 
alert(objParseErr); 


previousSibling 属性 
--------------------- 
传回目前节点之前的兄弟节点。 

基本语法: 
objPrevSibling = xmldocument.previousSibling; 
说明:传回一个对象,这个属性是只读的。若该节点没有包含前面的兄弟节点,会传回null。 
使用范例: 
objPrevSibling = xmlDoc.document.lement.childNodes.item(3).previousSibling 
alert(objPrevSibling); 


readyState 属性 
------------------- 
传回XML 文件资料的目前状况。

基本语法: 
intState = xmldocument.readyState; 
说明:这个属性是只读的,
传回值有以下的可能: 
0-UNINITIALIZED:XML 对象被产生,但没有任何文件被加载。 
1-LOADING:加载程序进行中,但文件尚未开始解析。 
2-LOADED:部分的文件已经加载且进行解析,但对象模型尚未生效。 
3-INTERACTIVE:仅对已加载的部分文件有效,在此情况下,对象模型是有效但只读的。 
4-COMPLETED:文件已完全加载,代表加载成功。 
使用范例: 
alert("The readyState property is " + xmlDoc.readyState); 


url 属性 
--------------- 
传回最近一次加载XML 文件的URL。

基本语法: 
strDocUrl = xmldocument.url; 
说明:这个属性是只读的,传回最近一次加载成功文件的URL,
若文件仅存在主存储器中(表示该文件并非由外部档案加载),则传回null
使用范例: 
alert(xmlDoc.url); 

validateOnParse 属性 
---------------------- 
告诉解析器文件是否有效。 

基本语法: 
boolValidate = xmldocument.validateOnParse; 
xmldocument.validateOnParse = boolValidate; 
说明:此属性是可擦写的。
如果传回值为true,表示文件被解析时被确认是有效的。
如果传回false,表示文件是无效的,并被认为只是标准格式的(well-formed)文件。 
使用范例: 
xmlDoc.validateOnParse = true; 
alert(xmlDoc.validateOnParse); 

xml 属性 
------------ 
传回指定节点的XML 描述和所有的子节点。 

基本语法: 
xmlvalue = xmldocument.ode.xml; 
说明:此属性是只读的。 
使用范例: 
xmlvalue = xmlDoc.document.lement.xml; 
alert(xmlvalue);


以下列出关于document对象可用的方法。 
1. abort 
2. appendChild 
3. cloneNode 
4. createAttribute 
5. createCDATASection 
6. createComment 
7. createdocument.ragment 
8. createElement 
9. createEntityReference 
10. createNode 
11. createProcessingInstruction 
12. createTextNode 
13. getElementsByTagName 
14. hasChildNodes 
15. insertBefore 
16. load 
17. loadXML 
18. nodeFromID 
19. parsed 
20. removeChild 
21. replaceChild 
22. selectNodes 
23. selectSingleNode 
24. transformNode 


abort 方法 
------------- 
abort 方法取消一个进行中的异步下载。

基本语法: 
xmldocument.abort(); 
说明:如果这个方法在异步下载时被呼叫,所有的解析动作会停止,
而且在内存中的文件会被释放。 


AppendChild 方法 
------------------ 
加上一个节点当作指定节点最后的子节点。

基本语法: 
xmldocument.ode.appendChild(newChild); 
说明:newChild 是附加子节点的地址。 
使用范例: 
docObj = xmlDoc.document.lement; 
alert(docObj.xml); 
objNewNode = docObj.appendChild(xmlDoc.document.lement.firstChild); 
alert(docObj.xml); 

cloneNode 方法 
--------------- 
建立指定节点的复制。 

基本语法: 
xmldocument.ode.cloneNode(deep); 
说明:deep 是一个布尔值。
如果为true,此节点会复制以指定节点发展出去的所有节点。
如果是false,只有指定的节点和它的属性被复制。
使用范例: 
currNode = xmlDoc.document.lement.childNodes.item(1); 
objClonedNode = currNode.cloneNode(1); 
alert(objClonedNode.xml); 


createAttribute 方法 
------------------------ 
建立一个指定名称的属性。

基本语法: 
xmldocument.createAttribute(name); 
说明:name 是被建立属性的名称。 
使用范例: 
objNewAtt = xmlDoc.createAttribute("encryption"); 
alert(objNewAtt.xml); 

createCDATASection 方法 
------------------------ 
建立一个包含特定数据的CDATA。 

基本语法: 
xmldocument.createCDATASection(data); 
说明:date 是一个字符串,且包含了被置放在CDATA 的资料。 
使用范例: 
objNewCDATA = xmlDoc.createCDATASection("This is a CDATA Section"); 
alert(objNewCDATA.xml); 


createComment 方法 
------------------- 
建立一个包含指定数据的批注。 

基本语法: 
xmldocument.createComment(data); 
说明:data 是一个字符串,且包含了被置放在批注的资料
使用范例: 
objNewComment = xmlDoc.createComment("This is a comment"); 
alert(objNewComment.xml); 


createdocument.ragment 方法 
----------------------------- 
建立一个空的文件片断对象。 

基本语法: 
xmldocument.createdocument.ragment(); 
说明:一个新的文件片断被建立,但没有加到文件树中。
要加入片断到文件树中,必须使用插入方法,
例如insertBefore、replaceChild 或 appendChild。
使用范例: 
objNewFragment = xmlDoc.createdocument.ragment(); 
alert(objNewFragment.xml); 

createElement 方法 
-------------------- 
建立一个指定名称的元素。

基本语法: 
xmldocument.createElement(tagName); 
说明:tagName 是一个区分大小写的字符串来指定新元素名称。
使用范例: 
objNewElement = xmlDoc.createElement("TO"); 
alert(objNewElement.xml); 

createEntityReference 方法 
----------------------------- 
建立一个参照到指定名称的实体。 


基本语法: 
xmldocument.createEntityReference(name); 
说明:name 是一个区分大小写的字符串,来指定新实体参照的名称。
一个新的实体参照被建立,但是并没有被加到文件树中。
若要将实体参照 加到文件树中,必须使用一种插入方法,
例如:insertBefore,replaceChild,或appendChild。
使用范例: 
objNewER = xmlDoc.createEntityReference("eRef"); 
alert(objNewER.xml); 


createNode 方法 
---------------------- 
建立一个指定型态、名称,及命名空间的新节点。 

基本语法: 
xmldocument.createNode(type, name, nameSpaceURI); 
说明:
type 用来确认要被建立的节点型态,
name 是一个字符串来确认新节点的名称,命名空间的前缀则是选择性的。
nameSpaceURI 是一个定 义命名空间URI 的字符串。
如果前缀被包含在名称参数中,此节点会在nameSpaceURI 的内文中以指定的前缀建立。
如果不包含前缀,指定的命 名空间会被视为预设的命名空间。 
使用范例:
objNewNode = xmlDoc.createNode(1,"TO",""); 
alert(objNewNode.xml); 

createProcessingInstruction 方法 
--------------------------------
建立一个新的处理指令,包含了指定的目标和数据。 

基本语法: 
xmldocument.createProcessingInstruction(target, data); 
说明:
target 是表示目标、名称或处理指令的字符串。
Data 是表示处理指令的值。
一个新的处理指令被建立,但是并没有加到文件树中。
要把处理指令加到文件树中,必须使用插入方法,
例如:insertBefore、replaceChild,或是appendChild。 
使用范例: 
objNewPI = xmlDoc.createProcessingInstruction(‘XML’, ‘version="1.0"’); 
alert(objNewPI.xml); 


createTextNode 方法 
------------------------ 
建立一个新的text 节点,并包含指定的数据。 

基本语法: 
xmldocument.createTextNode(data); 
说明:
data 是一个代表新text 节点的字符串。
一个新的text 节点被建立,但是没有加到文件树中。
若要将节点加到文件树中,必须使用插入 方法,
例如:insertBefore,replaceChild或appendChild。 
使用范例: 
objNewTextNode = xmlDoc.createTextNode("This is a text node."); 
alert(objNewTextNode.xml); 

getElementsByTagName 方法 
----------------------------- 
传回指定名称的元素集合。 

基本语法: 
objNodeList = xmldocument.getElementsByTagName(tagname); 
说明:
tagname 是一个字符串,代表找到的元素卷标名称。
使用tagname "*"传回文件中所有找到的元素。 
使用范例: 
objNodeList = xmlDoc.getElementsByTagName("*"); 
alert(objNodeList.item(1).xml); 


haschildnodes 方法 
---------------------- 
如果指定的节点有一个或更多子节点,传回值为true。

基本语法: 
boolvalue = xmldocument.ode.hasChildNodes() ; 
说明:如果此节点有子节点传回值为true,否则传回false 值。
使用范例: 
boolvalue = xmlDoc.document.lement.hasChildNodes(); 
alert(boolvalue); 


insertBefore 方法 
--------------------- 
在指定的节点前插入一个子节点。 

基本语法: 
objdocument.ode = xmldocument.ode.insertBefore(newChild,refChild); 
说明:
newChild 是一个包含新子节点地址的对象,
refChild 是参照节点的地址。
新子节点被插到参照节点之前。
如果refChild 参数没有包含 在内,新的子节点会被插到子节点列表的末端。 
使用范例: 
objRefNode = xmlDoc.document.lement; 
alert(xmlDoc.xml); 
objNewNode = xmlDoc.createComment("This is a comment"); 
xmlDoc.insertBefore(objNewNode, objRefNode); 
alert(xmlDoc.xml); 


load 方法 
-------------- 
表示从指定位置加载的文件。 

基本语法: 
boolvalue = xmldocument.load(url); 
说明:
url 包含要被加载档案的URL 的字符串。
假如文件加载成功,传回值即为true。
若加载失败,传回值为false。 
使用范例: 
boolvalue = xmlDoc.load("Lst.xml"); 
alert(boolvalue); 


loadXML 方法 
---------------- 
加载一个XML 文件或字符串的片断。

基本语法: 
boolvalue = xmldocument.loadXML(xmlString); 
说明:xmlString 是包含XML 文字码的字符串。 
这个字符串可以包含整个文件或者只是一个文件片断。
如果文件加载成功,传回值为true。
假如加载失败,传回值则是false。
使用范例: 
xmlString = "
<GREETING><MESSAGE>Hello!</MESSAGE></GREETING>"; 
boolvalue = xmlDoc.loadXML(xmlString); 
alert(boolvalue); 


nodeFromID 方法 
------------------ 
传回节点ID 符合指定值的节点。

基本语法: 
xmldocument.ode = xmldocument.nodeFromID(idString); 
说明:
idString 是一个包含ID 值的字符串。
符合的节点必定是ID 型态。
若符合,将传回一个对象;若操作失败,则传回null。
使用范例: 
objdocument.ode = xmlDoc.nodeFromID("TO"); 
alert(objdocument.ode); 

parsed 方法 
------------- 
会验证该指定的节点(node)及其衍生的子节点(descendants)是否已被解析过。

基本语法: 
boolvalue = xmldocument.ode.parsed();
说明:
如果全部的节点都已经被解析过了,则传回值为ture;
如果有任何一个节点尚未被解析,传回值则为false。
使用范例: 
currNode = xmlDoc.document.lement.childNodes.item(0);
boolvalue = currNode.parsed();
alert(boolvalue);


removeChild 方法 
------------------- 
会将指定的节点从节点清单中移除。 

基本语法: 
objdocument.ode = xmldocument.ode.removeChild(oldChild); 
说明:oldChild 为一个包含要被移除的节点对象。
使用范例: 
objRemoveNode = xmlDoc.document.lement.childNodes.item(3);
alert(xmlDoc.xml); 
xmlDoc.document.lement.removeChild(objRemoveNode);
alert(xmlDoc.xml);


replaceChild 方法 
-------------------- 
置换指定的旧子节点为提供的新子节点。 

基本语法: 
objdocument.ode = xmldocument.ode.replaceChild(newChild,oldChild);
说明:
newChild 为包含新子节点的对象。
如果此参数为null,则此旧子节点会被移除而不会被取代。
oldChild 为包含旧子节点的对象。 
使用范例: 
objOldNode = xmlDoc.document.lement.childNodes.item(3);
objNewNode = xmlDoc.createComment("I've replaced the BCC element.");
alert(xmlDoc.xml);
xmlDoc.document.lement.replaceChild(objNewNode,objOldNode);
alert(xmlDoc.xml);


selectNodes 方法 
-------------------- 
传回所有符合提供样式(pattern)的节点。 

基本语法: 
objdocument.odeList = xmldocument.ode.selectNodes(patternString);
说明:
patternString 为一包含XSL 样式的字符串。
此方法会传回节点清单对象,包含符合样式的节点。
如果没有符合的节点,则传回空的清单列表。 
使用范例: 
objNodeList=xmlDoc.selectNodes("/");
alert(objNodeList.item(0).xml);


selectSingleNode 方法 
-------------------------- 
传回第一个符合样式的节点。 

基本语法: 
objdocument.ode = xmldocument.ode.selectSingleNode(patternString);
说明:
patternString 为一包含XSL 样式的字符串。
此方法会传回第一个符合的节点对象,如果没有符合的节点,则传回null。 
使用范例: 
objNode = xmlDoc.selectSingleNode("EMAIL/BCC"); 
alert(objNode.xml);


transformNode 方法 
---------------------- 
使用提供的样式表来处理该节点及其子节点。 

基本语法: 
strTransformeddocument= xmldocument.ode.transformNode(stylesheet);
说明:
stylesheet 为一XML 文件或是片断包含负责节点转换工作的XSL 元素。
此方法会传回一包含转换结果的字符串。 

使用范例: 
var style = new ActiveXObject("Microsoft.XMLDOM");
style.load("Lst.xsl");
strTransform = xmlDoc.transformNode(style.document.lement);
alert(strTransform);

Document 对象的事件

下面列出来的是document对象可用的事件: 
1. Ondataavailable 
2. Onreadystatechange 


Ondataavailable 事件 
---------------------- 
此事件会在XML 文件有效时被触发。 

基本语法: 
此一事件有下面三种处理方式 
. Inline:
<element ondataavailable = handler>;
. Event property:object.ondataavailable = handler;
. Named script:
<SCRIPT FOR = object EVENT = ondataavailable>;
说明:ondataavailable 事件只要一获得有效的数据就会被触发。
这项技术并未说明在这个文件中有多少数据是有效的。 
使用范例: 
xmlDoc.ondataavailable 
= alert('Data is now available.');


Onreadystatechange 事件 
------------------------ 
这个事件会在readyState 属性内容改变时被触发。 

基本语法: 
此一事件有如下三种处理方式: 
. Inline:
<element onreadystatechange = handler>;
. Event property:object.onreadystatechange 
= handler;
. Named script:
<SCRIPT FOR = object EVENT = onreadystatechange>;
- 
说明:
onreadystatechange 事件在readyState 属性内容改变时就会被触发,
但这个事件并未说明「准备好」的状态是什么。
必须使用readyState 属性来取得现在的状态。
使用范例: 
xmlDoc.onreadystatechange 
= 
alert(
"The readyState property is" + xmlDoc.readyState);   

http:
//www.cnblogs.com/freeliver54/archive/2006/11/27/573657.html

xmlhttp:onreadystatechange属性

onreadystatechange

指定当readyState属性改变时的事件处理句柄

语法

oXMLHttpRequest.onreadystatechange = funcMyHandler;

Example

如下的例子演示当XMLHTTPRequest对象的readyState属性改变时调用HandleStateChange函数,当数据接收完毕后(readystate == 4)此页面上的一个按钮将被激活

var xmlhttp=null;

function PostOrder(xmldoc)

{

var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.5.0");

xmlhttp.Open("POST", "http://myserver/orders/processorder.asp", false);

xmlhttp.onreadystatechange= HandleStateChange;

xmlhttp.Send(xmldoc);

myButton.disabled = true;

}

function HandleStateChange()

{

if (xmlhttp.readyState == 4)

{

myButton.disabled = false;

alert("Result = " + xmlhttp.responseXML.xml);

}

}


--------------------------------------------------------------------------------


 

XMLHttpRequest对象

XMLHttpRequest

提供客户端同http服务器通讯的协议

Example

下面的代码是在JScript中创建一个XMLHTTP对象并从服务器请求一个XML文档。服务器返回XML文档并显示。

var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");

xmlHttpReq.open("GET", "http://localhost/books.xml", false);

xmlHttpReq.send();

alert(xmlHttpReq.responseText);

在非IE的浏览器中,需要用new XMLHttpRequest()来创建对象,如下:

var xmlHttpReq = new XMLHttpRequest();

xmlHttpReq.open("GET", "http://localhost/books.xml", false);

xmlHttpReq.send();

alert(xmlHttpReq.responseText);

vbscript:

Dim HttpReq As New MSXML2.XMLHTTP30

HttpReq.open "GET", "http://localhost/books.xml", False

HttpReq.send

MsgBox HttpReq.responseText

备注

客户端可以通过XmlHttp对象(MSXML2.XMLHTTP.3.0)向http服务器发送请求并使用微软XML文档对象模型Microsoft? XML Document Object Model (DOM)处理回应。



--------------------------------------------------------------------------------


xmlhttp:readyState属性

readyState

返回XMLHTTP请求的当前状态

语法

lValue = oXMLHttpRequest.readyState;

Example

var XmlHttp;

XmlHttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");

function send() {

XmlHttp.onreadystatechange = doHttpReadyStateChange;

XmlHttp.open("GET", "http://localhost/sample.xml", true);

XmlHttp.send();

}

function doHttpReadyStateChange() {

if (XmlHttp.readyState == 4) {

alert("Done");

}

}

备注

变量,此属性只读,状态用长度为4的整型表示.定义如下:

0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法)

1 (初始化) 对象已建立,尚未调用send方法

2 (发送数据) send方法已调用,但是当前的状态及http头未知

3 (数据传送中) 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,

4 (完成) 数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据



--------------------------------------------------------------------------------


 

xmlhttp:responsebody属性

responseBody

返回某一格式的服务器响应数据

语法

strValue = oXMLHttpRequest.responseBody;

Example

var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");

xmlhttp.open("GET", "http://localhost/books.xml", false);

xmlhttp.send();

alert(xmlhttp.responseBody);

备注

变量,此属性只读,以unsigned array格式表示直接从服务器返回的未经解码的二进制数据。

参考

responseStream 属性

responseText 属性



--------------------------------------------------------------------------------


 

xmlhttp:responsestream属性

responseStream

以Ado Stream对象的形式返回响应信息

语法

strValue = oXMLHttpRequest.responseStream;

备注

变量,此属性只读,以Ado Stream对象的形式返回响应信息。


--------------------------------------------------------------------------------


 

xmlhttp:responsetext属性

responseText

将响应信息作为字符串返回

语法

strValue = oXMLHttpRequest.responseText;

Example

var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");

xmlhttp.open("GET", "http://localhost/books.xml", false);

xmlhttp.send();

alert(xmlhttp.responseText);

备注

变量,此属性只读,将响应信息作为字符串返回。

XMLHTTP尝试将响应信息解码为Unicode字符串,XMLHTTP默认将响应数据的编码定为UTF-8,如果服务器返回的数据带BOM(byte -order mark),XMLHTTP可以解码任何UCS-2 (big or little endian)或者UCS-4 数据。注意,如果服务器返回的是xml文档,此属性并不处理xml文档中的编码声明。你需要使用responseXML来处理。


--------------------------------------------------------------------------------


 

xmlhttprequest:responsexml成员

responseXML

将响应信息格式化为Xml Document对象并返回

语法

var bjDispatch = oXMLHttpRequest.responseXML;

Example

var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");

xmlhttp.open("GET", "http://localhost/books.xml", false);

xmlhttp.send();

alert(xmlhttp.responseXML.xml);

备注

变量,此属性只读,将响应信息格式化为Xml Document对象并返回。如果响应数据不是有效的XML文档,此属性本身不返回XMLDOMParseError,可以通过处理过的DOMDocument对象获取错误信息。


--------------------------------------------------------------------------------


 

xmlhttprequest对象:status成员

status

返回当前请求的http状态码

语法

lValue = oXMLHttpRequest.status;

Example

var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");

xmlhttp.open("GET", "http://localhost/books.xml", false);

xmlhttp.send();

alert(xmlhttp.status);

返回值

长整形标准http状态码,定义如下:

Number Description

100

Continue

101

Switching protocols

200

OK

201

Created

202

Accepted

203

Non-Authoritative Information

204

No Content

205

Reset Content

206

Partial Content

300

Multiple Choices

301

Moved Permanently

302

Found

303

See Other

304

Not Modified

305

Use Proxy

307

Temporary Redirect

400

Bad Request

401

Unauthorized

402

Payment Required

403

Forbidden

404

Not Found

405

Method Not Allowed

406

Not Acceptable

407

Proxy Authentication Required

408

Request Timeout

409

Conflict

410

Gone

411

Length Required

412

Precondition Failed

413

Request Entity Too Large

414

Request-URI Too Long

415

Unsupported Media Type

416

Requested Range Not Suitable

417

Expectation Failed

500

Internal Server Error

501

Not Implemented

502

Bad Gateway

503

Service Unavailable

504

Gateway Timeout

505

HTTP Version Not Supported

备注

长整形,此属性只读,返回当前请求的http状态码,此属性仅当数据发送并接收完毕后才可获取。


--------------------------------------------------------------------------------


 

xmlhttprequest:statusText成员

statusText

返回当前请求的响应行状态

语法

strValue = oXMLHttpRequest.statusText;

Example

var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");

xmlhttp.open("GET", "http://localhost/books.xml", false);

xmlhttp.send();

alert(xmlhttp.statusText);

备注

字符串,此属性只读,以BSTR返回当前请求的响应行状态,此属性仅当数据发送并接收完毕后才可获取。


--------------------------------------------------------------------------------


 

xmlhttp:abort方法

abort

取消当前请求

语法

oXMLHttpRequest.abort();

备注

调用此方法后,当前请求返回UNINITIALIZED 状态。



--------------------------------------------------------------------------------


 

xmlhttp:getallresponseheaders方法

getallresponseheaders

获取响应的所有http头

语法

strValue = oXMLHttpRequest.getAllResponseHeaders();

Example

var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");

xmlhttp.open("GET", "http://localhost/sample.xml", false);

xmlhttp.send();

alert(xmlhttp.getAllResponseHeaders());

输出由web服务器返回的http头信息,example:

Server:Microsoft-IIS/5.1

X-Powered-By:ASP.NET

Date:Sat, 07 Jun 2003 23:23:06 GMT

Content-Type:text/xml

Accept-Ranges:bytes

Last Modified:Sat, 06 Jun 2003 17:19:04 GMT

ETag:"a0e2eeba4f2cc31:97f"

Content-Length:9

备注

每个http头名称和值用冒号分割,并以\r\n结束。当send方法完成后才可调用该方法。


--------------------------------------------------------------------------------


 

xmlhttp:getResponseHeader方法

getResponseHeader

从响应信息中获取指定的http头

语法

strValue = oXMLHttpRequest.getResponseHeader(bstrHeader);

Example

var xmlhttp = new ActiveXObject("MSXML2.XMLHTTP.3.0");

xmlhttp.open("GET", "http://localhost/sample.xml", false);

xmlhttp.send();

alert(xmlhttp.getResponseHeader("Server"));

输出http头中的server列:当前web服务器的版本及名称。

备注

当send方法成功后才可调用该方法。如果服务器返回的文档类型为"text/xml", 则这句话xmlhttp.getResponseHeader("Content-Type");将返回字符串"text/xml"。可以使用 getAllResponseHeaders方法获取完整的http头信息。


--------------------------------------------------------------------------------


 

xmlhttp:open方法

open

创建一个新的http请求,并指定此请求的方法、URL以及验证信息

语法

oXMLHttpRequest.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword);

参数

bstrMethod

http方法,例如:POST、GET、PUT及PROPFIND。大小写不敏感。

bstrUrl

请求的URL地址,可以为绝对地址也可以为相对地址。

varAsync[可选]

布尔型,指定此请求是否为异步方式,默认为true。如果为真,当状态改变时会调用onreadystatechange属性指定的回调函数。

bstrUser[可选]

如果服务器需要验证,此处指定用户名,如果未指定,当服务器需要验证时,会弹出验证窗口。

bstrPassword[可选]

验证信息中的密码部分,如果用户名为空,则此值将被忽略。

Example

下面的例子演示从服务器请求book.xml,并显示其中的book字段。

var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");

xmlhttp.open("GET","http://localhost/books.xml", false);

xmlhttp.send();

var book = xmlhttp.responseXML.selectSingleNode("//book[@id=''bk101'']");

alert(book.xml);

备注

调用此方法后,可以调用send方法向服务器发送数据。


--------------------------------------------------------------------------------


 

xmlhttp:send方法

send

发送请求到http服务器并接收回应

语法

oXMLHttpRequest.send(varBody);

参数

varBody

欲通过此请求发送的数据。

Example

xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");

xmlhttp.open("GET", "http://localhost/sample.xml", false);

xmlhttp.send();

alert(xmlhttp.responseXML.xml);

备注

此方法的同步或异步方式取决于open方法中的bAsync参数,如果bAsync == False,此方法将会等待请求完成或者超时时才会返回,如果bAsync == True,此方法将立即返回。

This method takes one optional parameter, which is the requestBody to use. The acceptable VARIANT input types are BSTR, SAFEARRAY of UI1 (unsigned bytes), IDispatch to an XML Document Object Model (DOM) object, and IStream *. You can use only chunked encoding (for sending) when sending IStream * input types. The component automatically sets the Content-Length header for all but IStream * input types.

如果发送的数据为BSTR,则回应被编码为utf-8, 必须在适当位置设置一个包含charset的文档类型头。

If the input type is a SAFEARRAY of UI1, the response is sent as is without additional encoding. The caller must set a Content-Type header with the appropriate content type.

如果发送的数据为XML DOM object,则回应将被编码为在xml文档中声明的编码,如果在xml文档中没有声明编码,则使用默认的UTF-8。

If the input type is an IStream *, the response is sent as is without additional encoding. The caller must set a Content-Type header with the appropriate content type.



--------------------------------------------------------------------------------


 

xmlhttp:setrequestheader方法

setRequestHeader

单独指定请求的某个http头

语法

oXMLHttpRequest.setRequestHeader(bstrHeader, bstrValue);

参数

bstrHeader

字符串,头名称。

bstrValue

字符串,值。

备注

如果已经存在已此名称命名的http头,则覆盖之。此方法必须在open方法后调用。

 

xmlhttp的请求同步和异步、方法的get和post

http://www.niceidea.org/post/xmlhttp_true_false_post_get.html

看看open方法的另外几个参数。

.open http-method, url, async, userID, password (后面是帐号和密码,在禁止匿名访问的http页面中,需要用户名和口令)

首先看看异步处理方式。

其中async是一个布尔值。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作。我们需要根据实际需要来指定同步方式,在某些页面中,可能会发出多个请求,甚至是有组织有计划有队形大规模的高强度的request,而后一个是会覆盖前一个的,这个时候当然要指定同步方式:Flase。

//niceidea 签名留念

首先看看method,方法。

一个标准的http请求头:

7/8/99 10:27:16 Sent GET /Store/Download.asp HTTP/1.1

Accept: application/msword, application/vnd.ms-execl, application/vnd.ms-

powerpoint, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-

comet, */*

Accept-Language: en-us

Encoding: gzip, deflate

Referer: http://ww.wrox.com/main_menu.asp

Cookie: VisitCount=2
&LASTDATE=6%2F4%2F99+10%3A10%3A13+AM

User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98)

Host: 212.250.238.67

Connection: Keep-Alive

很容易看懂,其中的method包括post/get/put等。对应的主要是对于form即表单元素的处理方法。

当mothod值为get时,表单将附加在action页面的url中;如果页面是asp的,将会request.querystring中获得;

如果是post,将会在request.form中获得,

对应与put方法的表单写法是:form. method="POST" enctype='multipart/form-data'

主要用于上传文件。

使用那种方法取决于服务端

posted on 2007-08-16 10:59  mjgforever  阅读(694)  评论(0编辑  收藏  举报