解析JSON時(shí)注意的相關(guān)問題進(jìn)行學(xué)習(xí)
進(jìn)行解析JSON是基于DOM的,對(duì)HTML的DOM熟悉的話,解析XML就沒什么困難了。注意:在Firefox中,解析器不會(huì)忽略空格,所以元素間的空格,F(xiàn)F一樣會(huì)認(rèn)為是一個(gè)節(jié)點(diǎn)。不過在我們用程序拼接XML的時(shí)候,一般不會(huì)出現(xiàn)節(jié)點(diǎn)間有空格的情況。#t#
在根目錄下添加一個(gè)新的一般處理程序(GetXml.ashx),代碼如下:
- <input type="button" value="GetXml" onclick="getXml();" />
在Default.aspx頁面添加以下腳本:
- GetXml.ashx
注意到代碼段解析JSON;主要是為了消除IE6和其他瀏覽器的兼容問題,在其他瀏覽器下,允許request.responseXML.getElementsByTagName("Person");添加測(cè)試按鈕:
- function getXml() {
- // 在IE7下測(cè)試通過,IE6下必須創(chuàng)建 new ActiveXObject("MSXML2.XMLHTTP.6.0")
- var request = new XMLHttpRequest();
- request.open('GET', 'GetXml.ashx');
- request.onreadystatechange = function() {
- if (request.readyState == 4 && request.status == 200) {
- var xmlDoc = request.responseXML;
- var root = xmlDoc.documentElement;
- var elements = root.getElementsByTagName("Person");
- alert(elements.length); // 2
- // elements[0].firstChild 引用到***個(gè)Person節(jié)點(diǎn)的Id節(jié)點(diǎn)
- // elements[0].firstChild.firstChild 引用到Id節(jié)點(diǎn)的文本節(jié)點(diǎn)
- // 因?yàn)槲谋竟?jié)點(diǎn)是元素節(jié)點(diǎn)的***個(gè)子節(jié)點(diǎn)
- alert(elements[0].firstChild.firstChild.nodeValue); // 1
- alert(elements[1].lastChild.firstChild.nodeValue); // 'n_2'
- }
- }
- request.send(null);
- }
從代碼上很容易看出,解析JSON相對(duì)直觀,在網(wǎng)絡(luò)中需要傳輸?shù)淖址脖容^少,解析過程中也不需要考慮瀏覽器兼容問題,但JSON比較適合輕量級(jí)的數(shù)據(jù)交互,XML則比JSON多了一些特性,比如命名空間,還有更多的節(jié)點(diǎn)類型。