使用xmlhttp.send()方法的參數來傳遞大容量的數據
Posted on 2006-03-27 15:33 DoNet鳥 閱讀(448) 評論(0) ?編輯?收藏引用收藏至365Key 所屬分類: DoNet技術????這個標題不知道怎么取才好,其實要實現的功能就是在客戶端要將大量的數據傳遞到服務端,我們知道url的長度是有限制的,如果使用url的參數來傳遞數據,只能傳遞很少的關鍵信息,但有時候我們要傳遞大量的信息,比如一張單據中的所有商品的商品編號等等.
??? Ajax技術中的xmlhttp.send()方法提供我們傳送大量數據的功能,要使用該功能,首先要將要傳到服務端的數據封裝在一個xml對象中,在將這個xml對象的xml屬性做為send()方法的參數就可以.
??? 客戶端代碼:
????????????????????
var
?guidArray
=
guidlist.split(
"
,
"
);
???????????????????? var ?xmlDom = new ?ActiveXObject( " MSXML2.DOMDocument " );
????????????????????xmlDom.loadXML( "" );
???????????????????? var ?domRoot = ?xmlDom.createElement( " NewDataSet " );
????????????????????xmlDom.appendChild(domRoot);
???????????????????? for ( var ?i = 0 ;i < guidArray.length;i ++ )
????????????????????{
??????????????????????? var ?node = ?xmlDom.createElement( " guid " );
???????????????????????node.text = guidArray[i];
???????????????????????domRoot.appendChild(node);???????????????????????
????????????????????}
????????????????????
???????????????????? var ?xmlhttp = new ?ActiveXObject( " MSXML2.XMLHTTP " );????????????????????
????????????????????xmlhttp.onreadystatechange = function (){
???????????????????????????? if ?(xmlhttp.readyState == 4 )
????????????????????????????{
?????????????????????????????? if ?(xmlhttp.status == 200 )
??????????????????????????????{
?????????????????????????????????alert( " 處理完成 " );
??????????????????????????????}
?????????????????????????????? else
??????????????????????????????{
?????????????????????????????????alert(xmlhttp.responseText);??
??????????????????????????????}
????????????????????????????}
??????????????????????????????????
????????????????????}
????????????????????xmlhttp.Open( " POST " , " fmSmsPostProcess.aspx?sStatus= " + escape(sStatus) + " &sProcessResult= " + escape(document.getElementById( " btProcessResult " ).value) +
????????????????????????????????????????? " &sReStore= " + escape(document.getElementById( " btReStore " ).value), true );
????????????????????xmlhttp.setRequestHeader( " Content-Type " , " text/xml " );?????????????????????????????????????????
????????????????????xmlhttp.send(xmlDom.xml);
服務端需要從請求流中,解析出客戶端傳入的xml的內容,服務端代碼:???????????????????? var ?xmlDom = new ?ActiveXObject( " MSXML2.DOMDocument " );
????????????????????xmlDom.loadXML( "" );
???????????????????? var ?domRoot = ?xmlDom.createElement( " NewDataSet " );
????????????????????xmlDom.appendChild(domRoot);
???????????????????? for ( var ?i = 0 ;i < guidArray.length;i ++ )
????????????????????{
??????????????????????? var ?node = ?xmlDom.createElement( " guid " );
???????????????????????node.text = guidArray[i];
???????????????????????domRoot.appendChild(node);???????????????????????
????????????????????}
????????????????????
???????????????????? var ?xmlhttp = new ?ActiveXObject( " MSXML2.XMLHTTP " );????????????????????
????????????????????xmlhttp.onreadystatechange = function (){
???????????????????????????? if ?(xmlhttp.readyState == 4 )
????????????????????????????{
?????????????????????????????? if ?(xmlhttp.status == 200 )
??????????????????????????????{
?????????????????????????????????alert( " 處理完成 " );
??????????????????????????????}
?????????????????????????????? else
??????????????????????????????{
?????????????????????????????????alert(xmlhttp.responseText);??
??????????????????????????????}
????????????????????????????}
??????????????????????????????????
????????????????????}
????????????????????xmlhttp.Open( " POST " , " fmSmsPostProcess.aspx?sStatus= " + escape(sStatus) + " &sProcessResult= " + escape(document.getElementById( " btProcessResult " ).value) +
????????????????????????????????????????? " &sReStore= " + escape(document.getElementById( " btReStore " ).value), true );
????????????????????xmlhttp.setRequestHeader( " Content-Type " , " text/xml " );?????????????????????????????????????????
????????????????????xmlhttp.send(xmlDom.xml);
????????????????System.IO.Stream?instream?=?Page.Request.InputStream;
????????????????BinaryReader?br?=?new?BinaryReader(instream,System.Text.Encoding.UTF8);
????????????????byte[]?byt?=?br.ReadBytes((int)instream.Length);
????????????????string?sXml?=?System.Text.Encoding.UTF8.GetString(byt);
????????????????System.Xml.XmlDocument?xmlDoc?=?new?System.Xml.XmlDocument();
????????????????xmlDoc.LoadXml(sXml);
????????????????XmlElement?xe=?xmlDoc.DocumentElement;
????????????????for(int?i=0;i<?xe.ChildNodes.Count;i++)
????????????????{
????????????????????sGuid?=?sGuid?+?",'"?+?xe.ChildNodes[i].InnerText+"'";
????????????????}