Ajax和WEB服務(wù)數(shù)據(jù)格式:自定義返回格式
這是這一系列的最后一篇文章了,前面我們講到了XML,SOAP,HTM格式和第二部分的JSON和JSONP。現(xiàn)在我們來(lái)看看自定義數(shù)據(jù)格式。
最佳的數(shù)據(jù)傳輸格式應(yīng)該是使用最少的傳輸量表達(dá)最需要的數(shù)據(jù)。想想之前在XML和JSON中定義的書(shū)的數(shù)據(jù)。我們每一本書(shū)包含6條數(shù)據(jù),所以我們可以簡(jiǎn)單的按照下面的格式來(lái)寫(xiě):
- The Principles of Beautiful Web Design, 2nd Edition;
- http: Beaird;SitePoint;39.95;USD //www.sitepoint.com/books/design2/;Jason
- jQuery: Novice to Ninja;
- http: Castledine & Craig Sharkie;SitePoint;29.95;USD //www.sitepoint.com/books/jquery1/;JEarle
- Build Your Own Database Driven Website;
- http: Yank;SitePoint;39.95;USD//www.sitepoint.com/books/phpmysql4/;Kevin
我們的數(shù)據(jù)現(xiàn)在看起來(lái)跟分號(hào)分隔的列表差不多了。我們使用回車(chē)來(lái)區(qū)分每一本書(shū),通過(guò)分號(hào)來(lái)區(qū)分書(shū)中的每一項(xiàng)內(nèi)容,這個(gè)分隔符必須謹(jǐn)慎的選擇,不選擇逗號(hào)因?yàn)榭赡軙?shū)名中出現(xiàn)逗號(hào)。
跟JSON不同,對(duì)于自定義的數(shù)據(jù)格式,我們必須得自己來(lái)解析返回的字符串,不過(guò)這個(gè)通過(guò)JavaScript自帶的split()方法可以輕松完成。下面的代碼就是將我們自定義的數(shù)據(jù)格式轉(zhuǎn)換成為JSON的:
- // convert custom data to an array of JavaScript objects
- function ParseBookData(ajaxdata) {
- var book = [], bookData = ajaxdata.split("\n"), bookItem;
- for (var b=0, bl=bookData.length; b < bl; b++) {
- bookItem = bookData[b].split(";");
- book[b] = {
- title: bookItem[0],
- url: bookItem[1],
- author: bookItem[2],
- publisher: bookItem[3],
- price: {
- amount: parseFloat(bookItem[4]),
- currency: bookItem[5]
- }
- };
- }
- return book;
- }
- var book = ParseBookData(xhr.responseText);
- alert(book[0].title); // first book title
- alert(book[1].url); // second book URL
JavaScript可以很快的處理這些數(shù)據(jù)–即使是一千本書(shū)的數(shù)據(jù)。大多數(shù)情況下,你會(huì)發(fā)現(xiàn)下載和處理數(shù)據(jù)的時(shí)間遠(yuǎn)小于同樣的基于JSON的異步請(qǐng)求的時(shí)間。
自定義的數(shù)據(jù)格式有下面這些好處:
◆ 很輕量級(jí)的數(shù)據(jù),傳輸比較快
◆ 在服務(wù)器端,不需要額外的東西就能很快很方便生成
◆ 用這種格式構(gòu)造惡意代碼就很困難了
當(dāng)然也有他的不好處:
◆ 對(duì)于那種格式不一定的數(shù)據(jù)就不太方便了。比如,我們的書(shū)籍信息由可選的PDF的下載鏈接和下載價(jià)格,這樣的話(huà),處理的程序邏輯就比較復(fù)雜了
◆ 你的服務(wù)可能比使用JSON和XML更加受到限制,如果你是自己在使用這個(gè)服務(wù),那么問(wèn)題不大,如果考慮到第三方使用的話(huà),就不方便了
◆ 需要為每一種的數(shù)據(jù)格式寫(xiě)處理的函數(shù)
◆ 這樣的數(shù)據(jù)可讀性就比較差了
◆ 還要確定分隔符不會(huì)出現(xiàn)在數(shù)據(jù)中間。需要在讀取的時(shí)候就做一些處理
看看前面的文章:
Ajax和WEB服務(wù)數(shù)據(jù)格式:XML SOAP HTML
Ajax和WEB服務(wù)數(shù)據(jù)格式:JSON JSONP
原文來(lái)自:http://rockux.com/
【編輯推薦】