使用xmlhttp.send()方法的參數(shù)來傳遞大容量的數(shù)據(jù)
Posted on 2006-03-27 15:33 DoNet鳥 閱讀(448) 評論(0) ?編輯?收藏引用收藏至365Key 所屬分類: DoNet技術(shù)????這個(gè)標(biāo)題不知道怎么取才好,其實(shí)要實(shí)現(xiàn)的功能就是在客戶端要將大量的數(shù)據(jù)傳遞到服務(wù)端,我們知道url的長度是有限制的,如果使用url的參數(shù)來傳遞數(shù)據(jù),只能傳遞很少的關(guān)鍵信息,但有時(shí)候我們要傳遞大量的信息,比如一張單據(jù)中的所有商品的商品編號等等.
??? Ajax技術(shù)中的xmlhttp.send()方法提供我們傳送大量數(shù)據(jù)的功能,要使用該功能,首先要將要傳到服務(wù)端的數(shù)據(jù)封裝在一個(gè)xml對象中,在將這個(gè)xml對象的xml屬性做為send()方法的參數(shù)就可以.
??? 客戶端代碼:
????????????????????
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);
服務(wù)端需要從請求流中,解析出客戶端傳入的xml的內(nèi)容,服務(wù)端代碼:???????????????????? 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+"'";
????????????????}