書寫AJAX的時候,常常需要解析從伺服器傳回的一串字串,這裡簡單介紹伺服器回傳字元的兩種格式,及JS對它們的解析方法。
一、JSON
即JS物件標記(JavaScript Object Notation),是一種以JS宣告物件的方式組合的一串字串。
JS可以用以下方式定義物件:
var obj = { id: 2 , name: ' n ' };
var objs = [{ id: 1 , name: ' n_1 ' }, { id: 2 , name: ' n_2 ' }]; alert(objs[ 0 ].id);
到這裡你或許已經想到伺服器返回的字串格式是怎樣的,但字串畢竟是字串,我們需要將其轉換為可以利用JS操作的變數。
這就用到eval 函數,請看下例:
var objs = eval( " [{ id: 1, name: 'n_1' }, { id: 2, name: 'n_2'}] " ); alert(objs[ 0 ].id); // return 1
在客戶端就可以利用eval() 執行傳回的字串,取得物件陣列。
GetJson.ashx
在Default.aspx 文件中添加测试脚本:
< script type = " text/javascript " > function getJson() { // 在IE7下测试通过,IE6下必须创建 new ActiveXObject("MSXML2.XMLHTTP.6.0") var request = new XMLHttpRequest(); request.open( ' GET ' , ' GetJson.ashx ' ); request.onreadystatechange = function () { if (request.readyState == 4 && request.status == 200 ) { var objs = eval(request.responseText); alert(objs.length); // 2 alert(objs[ 0 ].id); // 1 alert(objs[ 1 ].name); // 'n_2' } } request.send( null ); } < / script>
再添加一个测试按钮即可以看到效果:
<input type="button" value="GetJson" onclick="getJson();" />
二、XML
JS对XML的解析是基于DOM的,对HTML的DOM熟悉的话,解析XML就没什么困难了。
注意:在Firefox中,解析器不会忽略空格,所以元素间的空格,FF一样会认为是一个节点。
不过在我们用程序拼接XML的时候,一般不会出现节点间有空格的情况。
在根目录下添加一个新的一般处理程序(GetXml.ashx),代码如下:
在Default.aspx页面添加以下脚本:
function getXml() { // 在IE7下测试通过,IE6下必须创建 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 引用到第一个Person节点的Id节点 // elements[0].firstChild.firstChild 引用到Id节点的文本节点 // 因为文本节点是元素节点的第一个子节点 alert(elements[ 0 ].firstChild.firstChild.nodeValue); // 1 alert(elements[ 1 ].lastChild.firstChild.nodeValue); // 'n_2' } } request.send( null ); }
注意到代码段:var root = xmlDoc.documentElement;
主要是为了消除IE6和其他浏览器的兼容问题,在其他浏览器下,允许request.responseXML.getElementsByTagName("Person");
添加测试按钮:
<input type="button" value="GetXml" onclick="getXml();" />
总结:从代码上很容易看出,解析JSON相对直观,在网络中需要传输的字符串也比较少,解析过程中也不需要考虑浏览器兼容问题。
但JSON比较适合轻量级的数据交互,XML则比JSON多了一些特性,比如命名空间,还有更多的节点类型。
以上是詳細介紹JavaScript解析 JSON 及 XML的範例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!