Ajax學習2

來源:互聯網
上載者:User

一段代碼:
<SCRIPT LANGUAGE="JavaScript">
 var bloglist=new Array();
 var xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
 function startload()
 {
  xmlHttp.open("GET", "http://www.blogjava.net/zbw25/Rss.aspx", true);
  xmlHttp.onreadystatechange=function()
  {
  if (xmlHttp.readyState==4&&xmlHttp.status==200)
  {
   var xmldom=xmlHttp.responseXML;
   var channel=xmldom.documentElement.childNodes.item(0);
   var itemlist=channel.childNodes;
   for(var i=0;i<itemlist.length;i++)
   {
    var node=itemlist.item(i);
    if(node.tagName=="title")
    {
     blogtitle.innerHTML=node.text;
    }
    if(node.tagName=="link")
    {
     bloglink.href=node.text;
    }
    if(node.tagName=="description")
    {
     blogdescription.innerHTML=node.text;
    }
    if(node.tagName=="managingEditor")
    {
     managingEditor.innerHTML=node.text;
    }
    if(node.tagName=="item")
    {
     bloglist[bloglist.length]=node.childNodes;
    }
   }
   showitem(bloglist[0]);
   }
  }
  xmlHttp.send(null);
 }

 function showitem(itemlist)
 {
  for(var i=0;i<itemlist.length;i++)
  {
   var node=itemlist.item(i);
   if(node.tagName=="title")
   {
    itemtitle.innerHTML=node.text;
   }
   if(node.tagName=="link")
   {
    itemlink.href=node.text;
   }
   if(node.tagName=="description")
   {
    description.innerHTML=node.text;
   }
   if(node.tagName=="author")
   {
    author.innerHTML=node.text;
   }
   if(node.tagName=="pubDate")
   {
    pubDate.innerHTML=node.text;
   }
  }
 }
</SCRIPT>
<body onload="startload()">
 <font color="blue"><a id="bloglink" href="#"><div id="blogtitle"></div></a></font>
 <br>
 By <font color="blue"><div id="managingEditor"></div></font>
 <br>
 <font color="blue"><div id="blogdescription"></div></font>
 <br>
 <br>
 <font color="#000066"><a id="itemlink" href="#"><div id="itemtitle"></div></a></font><br>
 By <font color="blue"><div id="author"></div></font><br>
 <div id="description"></div><br>
 <div id="pubDate" align="right"></div>
</body>

xmlHttp.status==200
以後都推薦像這樣寫。因為xmlHttp.status==200,代表格服務器端返回的是正確的結果,這樣才有可能正確的解析XML
responseXML
第9行的程式是這樣的:var xmldom=xmlHttp.responseXML;
一個XMLHttpRequest,在順利讀取了資料之後,我們其實可以有四種方法,
得到這個資料。responseText只是其中一種。另外還有三種:
responseText 將響應資訊作為字串返回
responseXML 將響應資訊格式化為XMLDOM對象並返回
responseBody 將響應資訊以unsigned byte數組的形式返回
responseStream 將響應資訊以IStream對象的形式返回
其中我們需要深入瞭解的,只有responseText 和responseXML 兩種,至於
responseBody和responseStream,基本上可以不用考慮。

對於所謂AJAX應用,其實主要的工作,就是在瀏覽器用戶端與伺服器端之間,傳遞各種XML資料。如果要自己讀取String資料,然後再全部自己手工解析XML,那就會非常複雜;而使用responseXML,就可以直接得到一個已經解析好了的XML DOM,這樣就很方便了。

XMLDOM相關API
就算是直接得到了XMLDOM,事情也還沒有結束。我們還需要運用XMLDOM提供的API,來正確的讀取其中的資料。XMLDOM實在是太多內容了,這裡只介紹這段程式裡用到的API吧。

XMLDOM樹:一個XMLDOM,其實是一個記憶體中的樹,一個XML資料
中的每一個<>中的第一個單詞,就代表著一個節點。比如:
<rss>
<channel/>
</rss>
<channel />,就代表channel節點。如果channel這個節點,直接以/>結尾,
那麼它就不包含子節點。而rss節點,就是一個包含子節點channel的節點。我們
也可以說,rss是channel的父節點,channel就是rss的子節點。根節點,就是沒
有父節點的節點,也就是頂層節點。
documentElement:這樣就能夠得到一個XML DOM樹的根節點,具體到
我們想要分析的RSS文檔,就是rss那個節點。
childNodes與item:這樣就能夠得到一個節點的所有子節點,以一個數組
的形式返回。
1 var childs=node.childNodes;
2 alert(childs.length);
3 var itemnode=childs.item(0);
上面的childs就是一個JavaScript的數組,我們可以通過childs.length,得
到這個數組的長度。也可以通過item(int),得到其中的某一個元素,這個元素,
自然也是一個節點。
tagName:可以獲得一個節點的名稱。<rss>的tagName自然就是rss,<title>
的tagName,自然就是title。我們的程式就是通過判斷tagName,來識別資訊的。
text:就是一個節點包含的內容。比如< author>讀書、思考、生活</ author>。
那麼這個節點的text,就是 讀書、思考、生活。
OK,就說這麼多,XML DOM API當然不會這麼簡單,不過在現在這個程
序裡,我們用到的也就只有這麼多。
innerHTML與href
比如程式的第15行:blogtitle.innerHTML=node.text;
第18行:bloglink.href=node.text;
其實我們可以發現innerHTML與XML DOM中的node.text,有某種相似之
處。在初始的頁面上,我們寫著:
<font color=blue><a id="bloglink" href="#"><div id="blogtitle"></div></a></font>
這樣的內容,在靜態HTML頁面裡,其實什麼都看不到。但是有了<a
id="bloglink">和<div id="blogtitle">這樣的兩個元素,我們就可以藉助JavaScript
對於HTML DOM的訪問能力,動態在頁面裡顯示出內容來。
blogtitle.innerHTML="test";
就相當於
<div id="blogtitle">test</div>

bloglink.href="url";
就相當於
<a id="bloglink" href="url">
這就是初步的動態HTML(DHTML)了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.