玩玩Ajax系列 - Dom在asp與asp.net
前言
這陣子微軟似乎正在大力的推ajax,
而blog中如果有個ajax的資料,似乎也能增加些瀏覽數..
不過這次是因為某個專案的功能,才會有這篇的...
話說,因為支援別人寫的一個用了大量ajax的案子,
但是這個案子原本是用asp,而我則是要用asp.net 1.1開發新功能,
而原本的程式中,
是使用Microsoft.XMLDOM將要傳送的資料打包後post到後端,
程式碼如下(前端javascript的片段)
xmlData = "<xml>..................</xml>"
var xmlDom=new ActivexObject("Microsoft.XMLDOM")
xmlDom.load("domtest.xml")
而後端是用asp.一樣用Microsoft.XMLDOM來接收
而接收的程式如下
Dim mydoc
Set mydoc=Server.CreateObject("Microsoft.XMLDOM")
mydoc.async=false
mydoc.load(Request)
不過,現在問題來了,
1.前端用new ActiveObject("Microsoft.XMLDOM")在firefox下是不會動的.
2.而且也不適合再用Server.CreateObject來建立Microsoft.XMLDOM,
3.因為我是用.net 1.1,所以不能像asp這樣直接load(Request)
--
1.
在ie中使用xmlhttp是用new ActiveXObject("Microsoft.XMLHTTP");
而在firefox中則是用new XMLHttpRequest();
這個之前有說過.(使用xmlhttp讀取遠端檔案)
那Microsoft.XMLDOM呢??
其實,在firefox是不需要建立這個的.
只要直接使用下面的語法就可以了....
xml = "<xml>..................</xml>";
xmlHttp.open("POST", url);
xmlHttp.setRequestHeader("Content-Type", "text/xml");
xmlHttp.send(xml);
2.
.net 1.1中的Microsoft.XMLDOM呢?
如果注意一下前端送過來的資料就可以知道,XMLDOM實際上就是xml的內容,
所以在.net中是使用XMLDocument去接收,
所以程式碼如下
XmlDocument _xmldoc = new XmlDocument();
_xmldoc.LoadXml(xmlData);
而xmlData就是接收到的xml結構內容,但是.net要怎麼接收呢??
3.
在.net的Request物件跟asp的不同,不能直接用_xmldoc.Load(Request)
而.net中,Requet有個InputStream的屬性,
而這就是我們需要的,只是他是Stream,所以我們在接收的時候需要用StreamReader去接收,
所以接收的程式如下
StreamReader reader = new StreamReader(Request.InputStream);
string xmlData = reader.ReadToEnd();
以上,問題到此就解決了.
最後附上一個測試用的範例,
使用ajax的方式新增Rss item,
在ie跟firefox上都能work.
範例網址 : http://vip.blueshop.com.tw/ajun/item.htm
其中,前端的部分,程式都在頁面中了,
而後端接收的程式(ItemSave.aspx)的原始碼在這 http://vip.blueshop.com.tw/ajun/sample/ItemSave.aspx.cs.txt
有興趣的就玩玩吧!!