DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> AJAX入門 >> AJAX詳解 >> 使用JSON取代XML做AJAX的數據傳輸介質
使用JSON取代XML做AJAX的數據傳輸介質
編輯:AJAX詳解     

AJax這個詞語今年可是火爆了,這個詞語中的X就是表示XML,也就是我們通常使用的服務器端和客戶端進行交互的數據傳輸介質。當然XML有著開放、平台無關性等當前我們很注重的幾個方面的優勢,而且無論在哪個方面都可以靈活的應用,甚至數據庫都有采用XML的了(比如SQLSERVER和Oracle 等)。當然,有優勢並不一定代表在所有方面都OK,JSON-JavaScript Object Notation,一個也是最近比較流行的數據表示工具,在AJax框架(比如DOJO等)中都有所應用,最近我也在我的權限系統中大量的使用了JSON 作為前台JS和服務器進行數據庫交互的平台。先看一個簡單的例子:

比如我要從服務器端返回數據(2個屬性,success和message,表示執行成功與否和返回的提示信息),那麼使用XML就是如下表示:

<?XML version="1.0" encoding="GBK"?>
<Root>
<success>true</success>
<message><![CDATA[操作成功!]]></message>
</Root>

那麼我們在客戶端使用JS就應該如此來獲取數據了,如下:

function(XMLHttp)
{
var xml = xmlHttp.responseXML; // 獲取服務器端返回的XML數據流
var success = XML.getElementsByTagName("success")[0].firstChild.nodeValue;
var message = XML.getElementsByTagName("message")[0].firstChild.nodeValue;
……
}

我先不評論這兩個代碼,我們再看使用JSON如何表示,首先,在服務器端我們返回的字符串表示如下:

{"success":true,"message":" 操作成功!"}

那麼我們在客戶端又該如何進行解析呢?看如下代碼:

function(XMLHttp)
{
var val = XMLHttp.responseText; // 獲取服務器端返回的文本流
var obj = eval('(' + val + ')'); // 利用eval函數將返回的文本流轉換成JS對象
alert(obj.success); // 打印是否成功
alert(obj.message); // 打印服務器端返回的信息
}

看完上面的代碼後,大家有什麼想法呢?呵呵,是不是覺得第一種表示又簡單,又直觀呢?!而且從代碼的量上看,使用JSON可以明顯的減少客戶端的JS編程量,而且在同等的數據要求下,JSON的表示法肯定是要比XML表示法的字節數要少(上面XML分別是108個字符,JSON是34個字符),可以看到差別是明顯的,尤其是要表示的數據結構更加復雜和多的時候。

大家對JSON也有了初步的了解,我就從實際的使用角度來給大家講講JSON,當然,我這裡不會原原本的照搬官方網站上的介紹(官方網站地址:http://www.json.org/)和圖片等資源信息,這大家可以在baidu上一搜一大片,而且也可以在官方網站上了解什麼是JSON。

我這裡也給大家簡單的說下,怎麼表示JSON對象,我們直接在JS中表示就如下:

var obj = {
"a":"a1",
"b":"b1",
"c":"c1"
}

使用如上的表示就可以表示JS中的一個對象了,那麼訪問就很簡單了,直接obj.a,obj.b就可以了。當然也可以嵌套表示的,即對象裡再嵌入對象,如下:

var obj = {
"a":"a1",
"b":{
"b1":"b11",
"b2":"b22"
},
"c":"c1"
}
上面就表示了obj對象中嵌套了一個b對象,訪問就按照層次來訪問即可,比如obj.b.b1就可以得到值b11。可以看到使用JSON可以很方便的表示一個對象,而且JSON對象的表示法和JS的內置對象的表示是一樣的,這樣也就注定了使用eval函數來解析JSON字符串為對象時會比XML解析來的快,事實上也證明確實如此,大家可以使用一個XML和一個JSON來做個解析例子(當然要是大對象了)。

上面說的是我們直接在客戶端中寫JS對象,通常我們都會有應用是用來和服務器打交道的,就像我們文章最前面說的那樣。那麼我們在服務器端怎麼來輸出 JSON字符串呢?不會是手動的一個個的加吧?呵,當然不是這樣了,要是那樣的話,這樣介紹也就沒必要了哈,在服務器端我使用的是JSON-LIB,這個大家可以從http://JSon-lib.sourceforge.Net/上進行下載和查看,包裡總共也才20來個類和接口左右,是非常輕巧的一個JAR包。JSON-LIB依賴如下公用包:

jakarta commons-lang 2.3
jakarta commons-beanutils 1.7.0
jakarta commons-collections 3.2
jakarta commons-logging 1.1
ezmorph 1.0.1
JSON-LIB可以很容易的將一個實體JavaBean對象轉換成一個JSON字符串形式,也可以從Map中獲取值並進行轉換,我們看一段簡單的代碼:

……
Map<String,Object> map = new HashMap<String,Object>();
map.put("a", "a1");
Map<String,String> tmp = new HashMap<String,String>();
tmp.put("b1", "b11");
tmp.put("b2", "b22");
map.put("b", tmp);
map.put("c", "c1");
JSONObject obj = JSONObject.fromMap(map);
system.out.println(obj);
……

我們運行這段代碼,輸出結果如下:

{"a":"a1","c":"c1","b":{"b1":"b11","b2":"b22"}}

可以看到輸出結果和我們在上面表示的那個嵌套對象是一樣的(只是順序不一樣而已,這個不影響),這樣我們就可以很容易的將普通的Java對象轉換成 JSON對象了。這個JSON-LIB的API不多,也比較簡單,相信大家多看看,然後自己寫寫摸索摸索就可以很容易的寫出滿足自己要求的JSON對象了~~

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved