玩玩Ajax系列 - Dom在asp與asp.net

玩玩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

有興趣的就玩玩吧!!